Package org.postgresql.core
Class VisibleBufferedInputStream
- java.lang.Object
-
- java.io.InputStream
-
- org.postgresql.core.VisibleBufferedInputStream
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
public class VisibleBufferedInputStream extends java.io.InputStream
A faster version of BufferedInputStream. Does no synchronisation and allows direct access to the used byte[] buffer.- Author:
- Mikko Tiihonen
-
-
Constructor Summary
Constructors Constructor Description VisibleBufferedInputStream(java.io.InputStream in, int bufferSize)
Creates a new buffer around the given stream.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
available()
void
close()
boolean
ensureBytes(int n)
Ensures that the buffer contains at least n bytes.boolean
ensureBytes(int n, boolean block)
Ensures that the buffer contains at least n bytes.byte[]
getBuffer()
Returns direct handle to the used buffer.int
getIndex()
Returns the current read position in the buffer.java.io.InputStream
getWrapped()
Returns the underlying stream.int
peek()
Reads a byte from the buffer without advancing the index pointer.int
read()
int
read(byte[] to, int off, int len)
int
readInt2()
Reads an int2 value from the underlying stream as an unsigned integer (0..65535).int
readInt4()
Reads an int4 value from the underlying stream.byte
readRaw()
Reads byte from the buffer without any checks.int
scanCStringLength()
Scans the length of the next null terminated string (C-style string) from the stream.void
setTimeoutRequested(boolean timeoutRequested)
long
skip(long n)
-
-
-
Method Detail
-
read
public int read() throws java.io.IOException
- Specified by:
read
in classjava.io.InputStream
- Throws:
java.io.IOException
-
readInt2
public int readInt2() throws java.io.IOException
Reads an int2 value from the underlying stream as an unsigned integer (0..65535).- Returns:
- int2 in the range of 0..65535
- Throws:
java.io.IOException
- if an I/ O error occurs.
-
readInt4
public int readInt4() throws java.io.IOException
Reads an int4 value from the underlying stream.- Returns:
- int4 value from the underlying stream
- Throws:
java.io.IOException
- if an I/ O error occurs.
-
peek
public int peek() throws java.io.IOException
Reads a byte from the buffer without advancing the index pointer.- Returns:
- byte from the buffer without advancing the index pointer
- Throws:
java.io.IOException
- if something wrong happens
-
readRaw
public byte readRaw()
Reads byte from the buffer without any checks. This method never reads from the underlying stream. Before calling this method theensureBytes(int)
method must have been called.- Returns:
- The next byte from the buffer.
- Throws:
java.lang.ArrayIndexOutOfBoundsException
- If ensureBytes was not called to make sure the buffer contains the byte.
-
ensureBytes
public boolean ensureBytes(int n) throws java.io.IOException
Ensures that the buffer contains at least n bytes. This method invalidates the buffer and index fields.- Parameters:
n
- The amount of bytes to ensure exists in buffer- Returns:
- true if required bytes are available and false if EOF
- Throws:
java.io.IOException
- If reading of the wrapped stream failed.
-
ensureBytes
public boolean ensureBytes(int n, boolean block) throws java.io.IOException
Ensures that the buffer contains at least n bytes. This method invalidates the buffer and index fields.- Parameters:
n
- The amount of bytes to ensure exists in bufferblock
- whether or not to block the IO- Returns:
- true if required bytes are available and false if EOF or the parameter block was false and socket timeout occurred.
- Throws:
java.io.IOException
- If reading of the wrapped stream failed.
-
read
public int read(byte[] to, int off, int len) throws java.io.IOException
- Overrides:
read
in classjava.io.InputStream
- Throws:
java.io.IOException
-
skip
public long skip(long n) throws java.io.IOException
- Overrides:
skip
in classjava.io.InputStream
- Throws:
java.io.IOException
-
available
public int available() throws java.io.IOException
- Overrides:
available
in classjava.io.InputStream
- Throws:
java.io.IOException
-
close
public void close() throws java.io.IOException
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classjava.io.InputStream
- Throws:
java.io.IOException
-
getBuffer
public byte[] getBuffer()
Returns direct handle to the used buffer. Use theensureBytes(int)
to prefill required bytes the buffer andgetIndex()
to fetch the current position of the buffer.- Returns:
- The underlying buffer.
-
getIndex
public int getIndex()
Returns the current read position in the buffer.- Returns:
- the current read position in the buffer.
-
scanCStringLength
public int scanCStringLength() throws java.io.IOException
Scans the length of the next null terminated string (C-style string) from the stream.- Returns:
- The length of the next null terminated string.
- Throws:
java.io.IOException
- If reading of stream fails.java.io.EOFException
- If the stream did not contain any null terminators.
-
setTimeoutRequested
public void setTimeoutRequested(boolean timeoutRequested)
-
getWrapped
public java.io.InputStream getWrapped()
Returns the underlying stream.- Returns:
- the underlying stream
-
-