| Method from org.apache.lucene.store.InputStream Detail: |
public Object clone() {
InputStream clone = null;
try {
clone = (InputStream)super.clone();
} catch (CloneNotSupportedException e) {}
if (buffer != null) {
clone.buffer = new byte[BUFFER_SIZE];
System.arraycopy(buffer, 0, clone.buffer, 0, bufferLength);
}
clone.chars = null;
return clone;
}
Returns a clone of this stream.
Clones of a stream access the same data, and are positioned at the same
point as the stream they were cloned from.
Expert: Subclasses must ensure that clones may be positioned at
different points in the input from each other and from the stream they
were cloned from. |
abstract public void close() throws IOException
Closes the stream to futher operations. |
public final long getFilePointer() {
return bufferStart + bufferPosition;
}
Returns the current position in this file, where the next read will
occur. |
public final long length() {
return length;
}
The number of bytes in the file. |
public final byte readByte() throws IOException {
if (bufferPosition >= bufferLength)
refill();
return buffer[bufferPosition++];
}
Reads and returns a single byte. |
public final void readBytes(byte[] b,
int offset,
int len) throws IOException {
if (len < BUFFER_SIZE) {
for (int i = 0; i < len; i++) // read byte-by-byte
b[i + offset] = (byte)readByte();
} else { // read all-at-once
long start = getFilePointer();
seekInternal(start);
readInternal(b, offset, len);
bufferStart = start + len; // adjust stream variables
bufferPosition = 0;
bufferLength = 0; // trigger refill() on read
}
}
Reads a specified number of bytes into an array at the specified offset. |
public final void readChars(char[] buffer,
int start,
int length) throws IOException {
final int end = start + length;
for (int i = start; i < end; i++) {
byte b = readByte();
if ((b & 0x80) == 0)
buffer[i] = (char)(b & 0x7F);
else if ((b & 0xE0) != 0xE0) {
buffer[i] = (char)(((b & 0x1F) < < 6)
| (readByte() & 0x3F));
} else
buffer[i] = (char)(((b & 0x0F) < < 12)
| ((readByte() & 0x3F) < < 6)
| (readByte() & 0x3F));
}
}
Reads UTF-8 encoded characters into an array. |
public final int readInt() throws IOException {
return ((readByte() & 0xFF) < < 24) | ((readByte() & 0xFF) < < 16)
| ((readByte() & 0xFF) < < 8) | (readByte() & 0xFF);
}
Reads four bytes and returns an int. |
abstract protected void readInternal(byte[] b,
int offset,
int length) throws IOException
Expert: implements buffer refill. Reads bytes from the current position
in the input. |
public final long readLong() throws IOException {
return (((long)readInt()) < < 32) | (readInt() & 0xFFFFFFFFL);
}
Reads eight bytes and returns a long. |
public final String readString() throws IOException {
int length = readVInt();
if (chars == null || length > chars.length)
chars = new char[length];
readChars(chars, 0, length);
return new String(chars, 0, length);
}
|
public final int readVInt() throws IOException {
byte b = readByte();
int i = b & 0x7F;
for (int shift = 7; (b & 0x80) != 0; shift += 7) {
b = readByte();
i |= (b & 0x7F) < < shift;
}
return i;
}
Reads an int stored in variable-length format. Reads between one and
five bytes. Smaller values take fewer bytes. Negative numbers are not
supported. |
public final long readVLong() throws IOException {
byte b = readByte();
long i = b & 0x7F;
for (int shift = 7; (b & 0x80) != 0; shift += 7) {
b = readByte();
i |= (b & 0x7FL) < < shift;
}
return i;
}
Reads a long stored in variable-length format. Reads between one and
nine bytes. Smaller values take fewer bytes. Negative numbers are not
supported. |
public final void seek(long pos) throws IOException {
if (pos >= bufferStart && pos < (bufferStart + bufferLength))
bufferPosition = (int)(pos - bufferStart); // seek within buffer
else {
bufferStart = pos;
bufferPosition = 0;
bufferLength = 0; // trigger refill() on read()
seekInternal(pos);
}
}
Sets current position in this file, where the next read will occur. |
abstract protected void seekInternal(long pos) throws IOException
|