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.int
peek()
Reads a byte from the buffer without advancing the index pointer.int
read()
int
read(byte[] to, int off, int len)
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
-
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 underlaying 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 underlaying 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)
-
-