public class FastBufferedOutputStream extends MeasurableOutputStream implements RepositionableStream
This class provides buffering for output streams, but it does so with
purposes and an internal logic that are radically different from the ones
adopted in BufferedOutputStream
. The main features follow.
All methods are unsychronized.
As an additional feature, this class implements the RepositionableStream
and MeasurableStream
interfaces.
An instance of this class will try to cast
the underlying byte stream to a RepositionableStream
and to fetch by
reflection the FileChannel
underlying the given
output stream, in this order. If either reference can be successfully
fetched, you can use position(long)
to reposition the stream.
Much in the same way, an instance of this class will try to cast the
the underlying byte stream to a MeasurableStream
, and if this
operation is successful, or if a FileChannel
can
be detected, then position()
and length()
will work as expected.
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_BUFFER_SIZE
The default size of the internal buffer in bytes (8Ki).
|
Constructor and Description |
---|
FastBufferedOutputStream(java.io.OutputStream os)
Creates a new fast buffered ouptut stream by wrapping a given output stream with a buffer of
DEFAULT_BUFFER_SIZE bytes. |
FastBufferedOutputStream(java.io.OutputStream os,
byte[] buffer)
Creates a new fast buffered output stream by wrapping a given output stream with a given buffer.
|
FastBufferedOutputStream(java.io.OutputStream os,
int bufferSize)
Creates a new fast buffered output stream by wrapping a given output stream with a given buffer size.
|
Modifier and Type | Method and Description |
---|---|
void |
close() |
void |
flush() |
long |
length()
Returns the length of the underlying output stream, if it is measurable.
|
long |
position()
Returns the current stream position.
|
void |
position(long newPosition)
Repositions the stream.
|
void |
write(byte[] b,
int offset,
int length) |
void |
write(int b) |
public static final int DEFAULT_BUFFER_SIZE
public FastBufferedOutputStream(java.io.OutputStream os, byte[] buffer)
os
- an output stream to wrap.buffer
- a buffer of positive length.public FastBufferedOutputStream(java.io.OutputStream os, int bufferSize)
os
- an output stream to wrap.bufferSize
- the size in bytes of the internal buffer.public FastBufferedOutputStream(java.io.OutputStream os)
DEFAULT_BUFFER_SIZE
bytes.os
- an output stream to wrap.public void write(int b) throws java.io.IOException
write
in class java.io.OutputStream
java.io.IOException
public void write(byte[] b, int offset, int length) throws java.io.IOException
write
in class java.io.OutputStream
java.io.IOException
public void flush() throws java.io.IOException
flush
in interface java.io.Flushable
flush
in class java.io.OutputStream
java.io.IOException
public void close() throws java.io.IOException
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
close
in class java.io.OutputStream
java.io.IOException
public long position() throws java.io.IOException
RepositionableStream
position
in interface MeasurableStream
position
in interface RepositionableStream
java.io.IOException
public void position(long newPosition) throws java.io.IOException
Note that this method performs a flush()
before changing the underlying stream position.
position
in interface RepositionableStream
newPosition
- the new stream position.java.io.IOException
public long length() throws java.io.IOException
Note that this method performs a flush()
before detecting the length.
length
in interface MeasurableStream
java.lang.UnsupportedOperationException
- if the underlying output stream is not measurable and
cannot provide a FileChannel
.java.io.IOException