Package it.unimi.dsi.fastutil.io
Class FastMultiByteArrayInputStream
java.lang.Object
java.io.InputStream
it.unimi.dsi.fastutil.io.MeasurableInputStream
it.unimi.dsi.fastutil.io.FastMultiByteArrayInputStream
- All Implemented Interfaces:
MeasurableStream
,RepositionableStream
,Closeable
,AutoCloseable
public class FastMultiByteArrayInputStream
extends MeasurableInputStream
implements RepositionableStream
Simple, fast and repositionable byte array input stream that multiplexes its content among several arrays.
This class is significantly slower than
FastByteArrayInputStream
,
but it can hold 256 PiB of data. The relevant constructor is FastMultiByteArrayInputStream(InputStream, long)
,
which fetches a stream and loads it into a sequence of byte arrays.- Author:
- Sebastiano Vigna, Paolo Boldi s
-
Field Summary
Modifier and TypeFieldDescriptionbyte[][]
The array of arrays backing the input stream, plus an additionalnull
entry.byte[]
The current array.long
The number of valid bytes inarray
.static final int
The number of bits of an array slice index.static final int
The mask to retrieve a slice offset.static final int
The maximum length of an array slice. -
Constructor Summary
ConstructorDescriptionFastMultiByteArrayInputStream
(byte[] array) Creates a new multi-array input stream using a given array.Creates a new multi-array input stream sharing the backing arrays of another multi-array input stream.Creates a new multi-array input stream loading it from a measurable input stream.FastMultiByteArrayInputStream
(InputStream is, long size) Creates a new multi-array input stream loading it from an input stream. -
Method Summary
Modifier and TypeMethodDescriptionint
Returns the number of bytes that can be read (or skipped over) from this input stream without blocking.void
close()
NOP.long
length()
Returns the overall length of this stream (optional operation).void
mark
(int dummy) boolean
long
position()
Returns the current stream position.void
position
(long newPosition) Sets the current stream position.int
read()
int
read
(byte[] b, int offset, int length) void
reset()
long
skip
(long n) Methods inherited from class java.io.InputStream
nullInputStream, read, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
Field Details
-
SLICE_BITS
public static final int SLICE_BITSThe number of bits of an array slice index.- See Also:
-
SLICE_SIZE
public static final int SLICE_SIZEThe maximum length of an array slice.- See Also:
-
SLICE_MASK
public static final int SLICE_MASKThe mask to retrieve a slice offset.- See Also:
-
array
public byte[][] arrayThe array of arrays backing the input stream, plus an additionalnull
entry. -
current
public byte[] currentThe current array. -
length
public long lengthThe number of valid bytes inarray
.
-
-
Constructor Details
-
FastMultiByteArrayInputStream
Creates a new multi-array input stream loading it from a measurable input stream.- Parameters:
is
- the input stream that will fill the array.- Throws:
IOException
-
FastMultiByteArrayInputStream
Creates a new multi-array input stream loading it from an input stream.- Parameters:
is
- the input stream that will fill the array.size
- the number of bytes to be read fromis
.- Throws:
IOException
-
FastMultiByteArrayInputStream
Creates a new multi-array input stream sharing the backing arrays of another multi-array input stream.- Parameters:
is
- the multi-array input stream to replicate.
-
FastMultiByteArrayInputStream
public FastMultiByteArrayInputStream(byte[] array) Creates a new multi-array input stream using a given array.- Parameters:
array
- the backing array.
-
-
Method Details
-
available
public int available()Returns the number of bytes that can be read (or skipped over) from this input stream without blocking.Note that this number may be smaller than the number of bytes actually available from the stream if this number exceeds
Integer.MAX_VALUE
.- Overrides:
available
in classInputStream
- Returns:
- the minimum among the number of available bytes and
Integer.MAX_VALUE
.
-
skip
public long skip(long n) - Overrides:
skip
in classInputStream
-
read
public int read()- Specified by:
read
in classInputStream
-
read
public int read(byte[] b, int offset, int length) - Overrides:
read
in classInputStream
-
position
public long position()Description copied from interface:RepositionableStream
Returns the current stream position.- Specified by:
position
in interfaceMeasurableStream
- Specified by:
position
in interfaceRepositionableStream
- Returns:
- the current stream position.
-
position
public void position(long newPosition) Description copied from interface:RepositionableStream
Sets the current stream position.- Specified by:
position
in interfaceRepositionableStream
- Parameters:
newPosition
- the new stream position.
-
length
Description copied from interface:MeasurableStream
Returns the overall length of this stream (optional operation). In most cases, this will require the stream to perform some extra action, possibly changing the state of the input stream itself (typically, reading all the bytes up to the end, or flushing on output stream). Implementing classes should always document what state will the input stream be in after calling this method, and which kind of exception could be thrown.- Specified by:
length
in interfaceMeasurableStream
- Throws:
IOException
-
close
public void close()NOP.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classInputStream
-
markSupported
public boolean markSupported()- Overrides:
markSupported
in classInputStream
-
mark
public void mark(int dummy) - Overrides:
mark
in classInputStream
-
reset
public void reset()- Overrides:
reset
in classInputStream
-