Writerpublic abstract class Writer extends Object Abstract class for writing to character streams. The only methods that a
subclass must implement are write(char[], int, int), flush(), and close().
Most subclasses, however, will override some of the methods defined here in
order to provide higher efficiency, additional functionality, or both. |
Fields Summary |
---|
private char[] | writeBufferTemporary buffer used to hold writes of strings and single characters | private final int | writeBufferSizeSize of writeBuffer, must be >= 1 | protected Object | lockThe object used to synchronize operations on this stream. For
efficiency, a character-stream object may use an object other than
itself to protect critical sections. A subclass should therefore use
the object in this field rather than this or a synchronized
method. |
Constructors Summary |
---|
protected Writer()Create a new character-stream writer whose critical sections will
synchronize on the writer itself.
this.lock = this;
| protected Writer(Object lock)Create a new character-stream writer whose critical sections will
synchronize on the given object.
if (lock == null) {
throw new NullPointerException();
}
this.lock = lock;
|
Methods Summary |
---|
public abstract void | close()Close the stream, flushing it first. Once a stream has been closed,
further write() or flush() invocations will cause an IOException to be
thrown. Closing a previously-closed stream, however, has no effect.
| public abstract void | flush()Flush the stream. If the stream has saved any characters from the
various write() methods in a buffer, write them immediately to their
intended destination. Then, if that destination is another character or
byte stream, flush it. Thus one flush() invocation will flush all the
buffers in a chain of Writers and OutputStreams.
| public void | write(int c)Write a single character. The character to be written is contained in
the 16 low-order bits of the given integer value; the 16 high-order bits
are ignored.
Subclasses that intend to support efficient single-character output
should override this method.
synchronized (lock) {
if (writeBuffer == null){
writeBuffer = new char[writeBufferSize];
}
writeBuffer[0] = (char) c;
write(writeBuffer, 0, 1);
}
| public void | write(char[] cbuf)Write an array of characters.
write(cbuf, 0, cbuf.length);
| public abstract void | write(char[] cbuf, int off, int len)Write a portion of an array of characters.
| public void | write(java.lang.String str)Write a string.
write(str, 0, str.length());
| public void | write(java.lang.String str, int off, int len)Write a portion of a string.
synchronized (lock) {
char cbuf[];
if (len <= writeBufferSize) {
if (writeBuffer == null) {
writeBuffer = new char[writeBufferSize];
}
cbuf = writeBuffer;
} else { // Don't permanently allocate very large buffers.
cbuf = new char[len];
}
str.getChars(off, (off + len), cbuf, 0);
write(cbuf, 0, len);
}
|
|