Package it.unimi.dsi.io
Class ByteBufferInputStream
java.lang.Object
java.io.InputStream
it.unimi.dsi.fastutil.io.MeasurableInputStream
it.unimi.dsi.io.ByteBufferInputStream
- All Implemented Interfaces:
MeasurableStream
,RepositionableStream
,Closeable
,AutoCloseable
public class ByteBufferInputStream extends MeasurableInputStream implements RepositionableStream
A bridge between byte buffers and input streams.
Java's memory-mapping facilities have
the severe limitation of mapping at most Integer.MAX_VALUE
bytes, as they
expose the content of a file using a MappedByteBuffer
. This class can expose
a file of arbitrary length as a repositionable MeasurableInputStream
that is actually based on an array of MappedByteBuffer
s, each mapping
a chunk of CHUNK_SIZE
bytes.
- Since:
- 1.2
- Author:
- Sebastiano Vigna
-
Field Summary
Fields Modifier and Type Field Description static long
CHUNK_SIZE
The size of a chunk created bymap(FileChannel, FileChannel.MapMode)
. -
Constructor Summary
Constructors Modifier Constructor Description ByteBufferInputStream(ByteBuffer byteBuffer)
Creates a new byte-buffer input stream from a singleByteBuffer
.protected
ByteBufferInputStream(ByteBuffer[] byteBuffer, long size, int curr, boolean[] readyToUse)
Creates a new byte-buffer input stream. -
Method Summary
Modifier and Type Method Description int
available()
ByteBufferInputStream
copy()
long
length()
static ByteBufferInputStream
map(FileChannel fileChannel)
Creates a new read-only byte-buffer input stream by mapping a given file channel.static ByteBufferInputStream
map(FileChannel fileChannel, FileChannel.MapMode mapMode)
Creates a new byte-buffer input stream by mapping a given file channel.void
mark(int unused)
boolean
markSupported()
long
position()
void
position(long newPosition)
int
read()
int
read(byte[] b, int offset, int length)
void
reset()
long
skip(long n)
Methods inherited from class java.io.InputStream
close, nullInputStream, read, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo
-
Field Details
-
CHUNK_SIZE
public static final long CHUNK_SIZEThe size of a chunk created bymap(FileChannel, FileChannel.MapMode)
.
-
-
Constructor Details
-
ByteBufferInputStream
Creates a new byte-buffer input stream from a singleByteBuffer
.- Parameters:
byteBuffer
- the underlying byte buffer.
-
ByteBufferInputStream
protected ByteBufferInputStream(ByteBuffer[] byteBuffer, long size, int curr, boolean[] readyToUse)Creates a new byte-buffer input stream.- Parameters:
byteBuffer
- the underlying byte buffers.size
- the sum of the capacities of the byte buffers.curr
- the current buffer (reading will start at this buffer from its current position).readyToUse
- an array parallel tobyteBuffer
specifying which buffers do not need to be duplicated before being used (the process will happen lazily); the array will be used internally by the newly created byte-buffer input stream.
-
-
Method Details
-
map
Creates a new read-only byte-buffer input stream by mapping a given file channel.- Parameters:
fileChannel
- the file channel that will be mapped.- Returns:
- a new read-only byte-buffer input stream over the contents of
fileChannel
. - Throws:
IOException
-
map
public static ByteBufferInputStream map(FileChannel fileChannel, FileChannel.MapMode mapMode) throws IOExceptionCreates a new byte-buffer input stream by mapping a given file channel.- Parameters:
fileChannel
- the file channel that will be mapped.mapMode
- this must beFileChannel.MapMode.READ_ONLY
.- Returns:
- a new byte-buffer input stream over the contents of
fileChannel
. - Throws:
IOException
-
available
public int available()- Overrides:
available
in classInputStream
-
markSupported
public boolean markSupported()- Overrides:
markSupported
in classInputStream
-
mark
public void mark(int unused)- Overrides:
mark
in classInputStream
-
reset
- Overrides:
reset
in classInputStream
- Throws:
IOException
-
skip
- Overrides:
skip
in classInputStream
- Throws:
IOException
-
read
public int read()- Specified by:
read
in classInputStream
-
read
public int read(byte[] b, int offset, int length)- Overrides:
read
in classInputStream
-
length
public long length()- Specified by:
length
in interfaceMeasurableStream
-
position
public long position()- Specified by:
position
in interfaceMeasurableStream
- Specified by:
position
in interfaceRepositionableStream
-
position
public void position(long newPosition)- Specified by:
position
in interfaceRepositionableStream
-
copy
-