Package org.python.util
Class ConsoleOutputStream
java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
org.python.util.ConsoleOutputStream
- All Implemented Interfaces:
Closeable
,Flushable
,AutoCloseable
This class may be used to wrap and replace
System.out
so that the console handling
library (JLine or Java Readline) can treat an incomplete line (one without a newline) as a prompt
string, and so know the true position of the cursor. It achieves this by keeping a copy of bytes
that pass through from from upstream to the true System.out
, until either a newline
arrives, or a defined capacity (typically the console width) is reached. If client code requests
the partial line as a prompt, that action also empties the buffer. In that case, the client
(which is the console object) is responsible for making the prompt emerge on the real console.-
Constructor Summary
ConstructorDescriptionConsoleOutputStream
(OutputStream out, int promptCapacity) Create a wrapper on anOutputStream
that holds a copy of the last incomplete line written to it (as bytes), in case it is needed as a console prompt. -
Method Summary
Methods inherited from class java.io.FilterOutputStream
write, write
Methods inherited from class java.io.OutputStream
nullOutputStream
-
Constructor Details
-
ConsoleOutputStream
Create a wrapper on anOutputStream
that holds a copy of the last incomplete line written to it (as bytes), in case it is needed as a console prompt.- Parameters:
out
- the stream wrapped (normallySystem.out
)promptCapacity
- maximum number of bytes to buffer
-
-
Method Details
-
write
This write method steals a copy of each byte in a buffer while passing it on to the wrapped stream. The buffer is reset by each newline, when it overflows, or by the client when it is taken as a console prompt ingetPrompt(Charset)
.- Overrides:
write
in classFilterOutputStream
- Throws:
IOException
-
flush
- Specified by:
flush
in interfaceFlushable
- Overrides:
flush
in classFilterOutputStream
- Throws:
IOException
-
close
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classFilterOutputStream
- Throws:
IOException
-