public class WriterOutputStream
extends java.io.OutputStream
OutputStream implementation that transforms a byte stream to a
character stream using a specified charset encoding and writes the resulting
stream to a Writer. The stream is transformed using a
CharsetDecoder object, guaranteeing that all charset
encodings supported by the JRE are handled correctly.
The output of the CharsetDecoder is buffered using a fixed size buffer.
This implies that the data is written to the underlying Writer in chunks
that are no larger than the size of this buffer. By default, the buffer is
flushed only when it overflows or when flush() or close()
is called. In general there is therefore no need to wrap the underlying Writer
in a BufferedWriter. WriterOutputStream can also
be instructed to flush the buffer after each write operation. In this case, all
available data is written immediately to the underlying Writer, implying that
the current position of the Writer is correlated to the current position
of the WriterOutputStream.
WriterOutputStream implements the inverse transformation of OutputStreamWriter;
in the following example, writing to out2 would have the same result as writing to
out directly (provided that the byte sequence is legal with respect to the
charset encoding):
OutputStream out = ... Charset cs = ... OutputStreamWriter writer = new OutputStreamWriter(out, cs); WriterOutputStream out2 = new WriterOutputStream(writer, cs);
WriterOutputStream implements the same transformation as InputStreamReader,
except that the control flow is reversed: both classes transform a byte stream
into a character stream, but InputStreamReader pulls data from the underlying stream,
while WriterOutputStream pushes it to the underlying stream.
Note that while there are use cases where there is no alternative to using
this class, very often the need to use this class is an indication of a flaw
in the design of the code. This class is typically used in situations where an existing
API only accepts an OutputStream object, but where the stream is known to represent
character data that must be decoded for further use.
Instances of WriterOutputStream are not thread safe.
ReaderInputStream| Modifier and Type | Field and Description |
|---|---|
private java.nio.charset.CharsetDecoder |
decoder |
private java.nio.ByteBuffer |
decoderIn
ByteBuffer used as input for the decoder.
|
private java.nio.CharBuffer |
decoderOut
CharBuffer used as output for the decoder.
|
private static int |
DEFAULT_BUFFER_SIZE |
private boolean |
writeImmediately |
private java.io.Writer |
writer |
| Constructor and Description |
|---|
WriterOutputStream(java.io.Writer writer)
Deprecated.
2.5 use
WriterOutputStream(Writer, Charset) instead |
WriterOutputStream(java.io.Writer writer,
java.nio.charset.Charset charset)
Constructs a new
WriterOutputStream with a default output buffer size of
1024 characters. |
WriterOutputStream(java.io.Writer writer,
java.nio.charset.CharsetDecoder decoder)
Constructs a new
WriterOutputStream with a default output buffer size of
1024 characters. |
WriterOutputStream(java.io.Writer writer,
java.nio.charset.CharsetDecoder decoder,
int bufferSize,
boolean writeImmediately)
Constructs a new
WriterOutputStream. |
WriterOutputStream(java.io.Writer writer,
java.nio.charset.Charset charset,
int bufferSize,
boolean writeImmediately)
Constructs a new
WriterOutputStream. |
WriterOutputStream(java.io.Writer writer,
java.lang.String charsetName)
Constructs a new
WriterOutputStream with a default output buffer size of
1024 characters. |
WriterOutputStream(java.io.Writer writer,
java.lang.String charsetName,
int bufferSize,
boolean writeImmediately)
Constructs a new
WriterOutputStream. |
| Modifier and Type | Method and Description |
|---|---|
private static void |
checkIbmJdkWithBrokenUTF16(java.nio.charset.Charset charset) |
void |
close()
Close the stream.
|
void |
flush()
Flush the stream.
|
private void |
flushOutput()
Flush the output.
|
private void |
processInput(boolean endOfInput)
Decode the contents of the input ByteBuffer into a CharBuffer.
|
void |
write(byte[] b)
Write bytes from the specified byte array to the stream.
|
void |
write(byte[] b,
int off,
int len)
Write bytes from the specified byte array to the stream.
|
void |
write(int b)
Write a single byte to the stream.
|
private static final int DEFAULT_BUFFER_SIZE
private final java.io.Writer writer
private final java.nio.charset.CharsetDecoder decoder
private final boolean writeImmediately
private final java.nio.ByteBuffer decoderIn
private final java.nio.CharBuffer decoderOut
public WriterOutputStream(java.io.Writer writer,
java.nio.charset.CharsetDecoder decoder)
WriterOutputStream with a default output buffer size of
1024 characters. The output buffer will only be flushed when it overflows or when
flush() or close() is called.writer - the target Writerdecoder - the charset decoderpublic WriterOutputStream(java.io.Writer writer,
java.nio.charset.CharsetDecoder decoder,
int bufferSize,
boolean writeImmediately)
WriterOutputStream.writer - the target Writerdecoder - the charset decoderbufferSize - the size of the output buffer in number of characterswriteImmediately - If true the output buffer will be flushed after each
write operation, i.e. all available data will be written to the
underlying Writer immediately. If false, the
output buffer will only be flushed when it overflows or when
flush() or close() is called.public WriterOutputStream(java.io.Writer writer,
java.nio.charset.Charset charset,
int bufferSize,
boolean writeImmediately)
WriterOutputStream.writer - the target Writercharset - the charset encodingbufferSize - the size of the output buffer in number of characterswriteImmediately - If true the output buffer will be flushed after each
write operation, i.e. all available data will be written to the
underlying Writer immediately. If false, the
output buffer will only be flushed when it overflows or when
flush() or close() is called.public WriterOutputStream(java.io.Writer writer,
java.nio.charset.Charset charset)
WriterOutputStream with a default output buffer size of
1024 characters. The output buffer will only be flushed when it overflows or when
flush() or close() is called.writer - the target Writercharset - the charset encodingpublic WriterOutputStream(java.io.Writer writer,
java.lang.String charsetName,
int bufferSize,
boolean writeImmediately)
WriterOutputStream.writer - the target WritercharsetName - the name of the charset encodingbufferSize - the size of the output buffer in number of characterswriteImmediately - If true the output buffer will be flushed after each
write operation, i.e. all available data will be written to the
underlying Writer immediately. If false, the
output buffer will only be flushed when it overflows or when
flush() or close() is called.public WriterOutputStream(java.io.Writer writer,
java.lang.String charsetName)
WriterOutputStream with a default output buffer size of
1024 characters. The output buffer will only be flushed when it overflows or when
flush() or close() is called.writer - the target WritercharsetName - the name of the charset encoding@Deprecated public WriterOutputStream(java.io.Writer writer)
WriterOutputStream(Writer, Charset) insteadWriterOutputStream that uses the default character encoding
and with a default output buffer size of 1024 characters. The output buffer will only
be flushed when it overflows or when flush() or close() is called.writer - the target Writerpublic void write(byte[] b,
int off,
int len)
throws java.io.IOException
write in class java.io.OutputStreamb - the byte array containing the bytes to writeoff - the start offset in the byte arraylen - the number of bytes to writejava.io.IOException - if an I/O error occurspublic void write(byte[] b)
throws java.io.IOException
write in class java.io.OutputStreamb - the byte array containing the bytes to writejava.io.IOException - if an I/O error occurspublic void write(int b)
throws java.io.IOException
write in class java.io.OutputStreamb - the byte to writejava.io.IOException - if an I/O error occurspublic void flush()
throws java.io.IOException
Writer. After that
Writer.flush() will be called.flush in interface java.io.Flushableflush in class java.io.OutputStreamjava.io.IOException - if an I/O error occurspublic void close()
throws java.io.IOException
Writer. After that
Writer.close() will be called.close in interface java.io.Closeableclose in interface java.lang.AutoCloseableclose in class java.io.OutputStreamjava.io.IOException - if an I/O error occursprivate void processInput(boolean endOfInput)
throws java.io.IOException
endOfInput - indicates end of inputjava.io.IOException - if an I/O error occursprivate void flushOutput()
throws java.io.IOException
java.io.IOException - if an I/O error occursprivate static void checkIbmJdkWithBrokenUTF16(java.nio.charset.Charset charset)
Copyright (c) 2002-2016 Apache Software Foundation