Class StandardOutputStream
- java.lang.Object
-
- java.io.OutputStream
-
- hudson.remoting.StandardOutputStream
-
- All Implemented Interfaces:
Closeable
,Flushable
,AutoCloseable
public class StandardOutputStream extends OutputStream
Hint that indicates that we are usingstdout
with fd=1 as the stream to write to for the channel.Using stdin/stdout pair for the communication is very convenient for setting up a remote channel, so Jenkins tends to do that, but even with our using
System.setOut(PrintStream)
to avoid other parts of the Java code to accidentally corrupt the stream, file descriptor 1 continues to point to the stream we use, so native code in JVM can still accidentally pollute the stream.Fixing that requires the use of dup and close POSIX API calls, which we can only do after the communication gets established and JNA is brought in via remoting. Having
Launcher
uses this wrapper class allows us to do that without recreating the stream.When a channel uses
StandardOutputStream
to communicate, the convention is to make that object available as a channel property.- Author:
- Kohsuke Kawaguchi
-
-
Constructor Summary
Constructors Constructor Description StandardOutputStream()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
void
flush()
boolean
isSwapped()
OutputStream
swap(OutputStream another)
Atomically swaps the underlying stream to another stream and returns it.void
write(byte[] b)
void
write(byte[] b, int off, int len)
void
write(int b)
-
Methods inherited from class java.io.OutputStream
nullOutputStream
-
-
-
-
Method Detail
-
swap
public OutputStream swap(OutputStream another)
Atomically swaps the underlying stream to another stream and returns it.
-
isSwapped
public boolean isSwapped()
-
write
public void write(int b) throws IOException
- Specified by:
write
in classOutputStream
- Throws:
IOException
-
write
public void write(@NonNull byte[] b) throws IOException
- Overrides:
write
in classOutputStream
- Throws:
IOException
-
write
public void write(@NonNull byte[] b, int off, int len) throws IOException
- Overrides:
write
in classOutputStream
- Throws:
IOException
-
flush
public void flush() throws IOException
- Specified by:
flush
in interfaceFlushable
- Overrides:
flush
in classOutputStream
- Throws:
IOException
-
close
public void close() throws IOException
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classOutputStream
- Throws:
IOException
-
-