Package org.postgresql.largeobject
Class BlobInputStream
- java.lang.Object
-
- java.io.InputStream
-
- org.postgresql.largeobject.BlobInputStream
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable
public class BlobInputStream extends java.io.InputStreamThis is an implementation of an InputStream from a large object.
-
-
Field Summary
Fields Modifier and Type Field Description private longabsolutePositionThe absolute position.private byte[]bufferBuffer used to improve performance.private intbufferPositionPosition within buffer.(package private) static intDEFAULT_MAX_BUFFER_SIZE(package private) static intINITIAL_BUFFER_SIZEprivate intlastBufferSizeThe amount of bytes to read on the next read.private longlimitThe limit.private LargeObjectloThe parent LargeObject.private ResourceLocklockprivate longmarkPositionThe mark position.private intmaxBufferSizeThe buffer size.
-
Constructor Summary
Constructors Constructor Description BlobInputStream(LargeObject lo)BlobInputStream(LargeObject lo, int bsize)BlobInputStream(LargeObject lo, int bsize, long limit)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()Closes this input stream and releases any system resources associated with the stream.private LargeObjectgetLo()private intgetNextBufferSize(int len)Computes the next buffer size to use for reading data from the large object.voidmark(int readlimit)Marks the current position in this input stream.booleanmarkSupported()Tests if this input stream supports themarkandresetmethods.intread()The minimum required to implement input stream.intread(byte[] dest, int off, int len)voidreset()Repositions this stream to the position at the time themarkmethod was last called on this input stream.
-
-
-
Field Detail
-
DEFAULT_MAX_BUFFER_SIZE
static final int DEFAULT_MAX_BUFFER_SIZE
- See Also:
- Constant Field Values
-
INITIAL_BUFFER_SIZE
static final int INITIAL_BUFFER_SIZE
- See Also:
- Constant Field Values
-
lo
private LargeObject lo
The parent LargeObject.
-
lock
private final ResourceLock lock
-
absolutePosition
private long absolutePosition
The absolute position.
-
buffer
private byte[] buffer
Buffer used to improve performance.
-
bufferPosition
private int bufferPosition
Position within buffer.
-
lastBufferSize
private int lastBufferSize
The amount of bytes to read on the next read. Currently, we nullifybuffer, so we can't usebuffer.length.
-
maxBufferSize
private final int maxBufferSize
The buffer size.
-
markPosition
private long markPosition
The mark position.
-
limit
private final long limit
The limit.
-
-
Constructor Detail
-
BlobInputStream
public BlobInputStream(LargeObject lo)
- Parameters:
lo- LargeObject to read from
-
BlobInputStream
public BlobInputStream(LargeObject lo, int bsize)
- Parameters:
lo- LargeObject to read frombsize- buffer size
-
BlobInputStream
public BlobInputStream(LargeObject lo, int bsize, long limit)
- Parameters:
lo- LargeObject to read frombsize- buffer sizelimit- max number of bytes to read
-
-
Method Detail
-
read
public int read() throws java.io.IOExceptionThe minimum required to implement input stream.- Specified by:
readin classjava.io.InputStream- Throws:
java.io.IOException
-
getNextBufferSize
private int getNextBufferSize(int len)
Computes the next buffer size to use for reading data from the large object. The idea is to avoid allocating too much memory, especially if the user will use just a few bytes of the data.- Parameters:
len- estimated read request- Returns:
- next buffer size or
maxBufferSizeif the buffer should not be increased
-
read
public int read(byte[] dest, int off, int len) throws java.io.IOException- Overrides:
readin classjava.io.InputStream- Throws:
java.io.IOException
-
close
public void close() throws java.io.IOExceptionCloses this input stream and releases any system resources associated with the stream.The
closemethod ofInputStreamdoes nothing.- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Overrides:
closein classjava.io.InputStream- Throws:
java.io.IOException- if an I/O error occurs.
-
mark
public void mark(int readlimit)
Marks the current position in this input stream. A subsequent call to theresetmethod repositions this stream at the last marked position so that subsequent reads re-read the same bytes.The
readlimitarguments tells this input stream to allow that many bytes to be read before the mark position gets invalidated.The general contract of
markis that, if the methodmarkSupportedreturnstrue, the stream somehow remembers all the bytes read after the call tomarkand stands ready to supply those same bytes again if and whenever the methodresetis called. However, the stream is not required to remember any data at all if more thanreadlimitbytes are read from the stream beforeresetis called.Marking a closed stream should not have any effect on the stream.
- Overrides:
markin classjava.io.InputStream- Parameters:
readlimit- the maximum limit of bytes that can be read before the mark position becomes invalid.- See Also:
InputStream.reset()
-
reset
public void reset() throws java.io.IOExceptionRepositions this stream to the position at the time themarkmethod was last called on this input stream. NB: If mark is not called we move to the beginning.- Overrides:
resetin classjava.io.InputStream- Throws:
java.io.IOException- See Also:
InputStream.mark(int),IOException
-
markSupported
public boolean markSupported()
Tests if this input stream supports themarkandresetmethods. ThemarkSupportedmethod ofInputStreamreturnsfalse.- Overrides:
markSupportedin classjava.io.InputStream- Returns:
trueif this true type supports the mark and reset method;falseotherwise.- See Also:
InputStream.mark(int),InputStream.reset()
-
getLo
private LargeObject getLo() throws java.io.IOException
- Throws:
java.io.IOException
-
-