public class SegmentedInputStream
extends it.unimi.dsi.fastutil.io.MeasurableInputStream
InputStream
as a number of streams divided into reset()
-separated
segments.
An instance of this class wraps a given input stream (usually a replicable one, such as
a FileInputStream
) and exposes its contents as a number of separated input
streams. Each such stream, called a block, is defined by a start and a stop position (gaps
between blocks are possible). Inside each block we can have one or more segments: each
segment is again a separate input stream, but calling reset()
moves
from one segment to the following one, whereas calling close()
moves from a block to the following one.
An instance of this class is enriched with blocks by calling addBlock(long[])
. This
can also be done on-the-fly, while the underlying input stream is being scanned.
Constructor and Description |
---|
SegmentedInputStream(InputStream in)
Creates a segmented input stream with no markers.
|
SegmentedInputStream(InputStream in,
long... delimiter)
Creats a stream with one marker in.
|
Modifier and Type | Method and Description |
---|---|
void |
addBlock(long... delimiter)
Adds a new block defined by its array of segment delimiters.
|
int |
available() |
void |
close()
Skips to the next block, closing this segmented input stream if there are no more blocks.
|
boolean |
hasMoreBlocks()
Checks whether there are more blocks.
|
long |
length() |
void |
nextBlock()
Skips to the first segment of the next block, if any.
|
long |
position() |
int |
read() |
int |
read(byte[] b,
int off,
int len) |
void |
reset()
Moves into the next segment of the current block.
|
long |
skip(long n) |
mark, markSupported, read
public SegmentedInputStream(InputStream in)
in
- the underlying input stream.public SegmentedInputStream(InputStream in, long... delimiter) throws NullPointerException, IOException, IllegalStateException
in
- the underlying input stream.delimiter
- an array of segment delimiters.NullPointerException
IOException
IllegalStateException
public void nextBlock() throws IOException
IOException
public boolean hasMoreBlocks()
public void addBlock(long... delimiter) throws IllegalArgumentException, IOException
The block has length defined by the difference between the last and first delimiter.
This method performs the initial call to nextBlock()
when the first marker
is put in.
delimiter
- a list of segment delimiters.IllegalArgumentException
- if the elements of delimiter
are negative or not increasing.IOException
public int read() throws IOException
read
in class InputStream
IOException
public int read(byte[] b, int off, int len) throws IOException
read
in class InputStream
IOException
public long skip(long n) throws IOException
skip
in class InputStream
IOException
public int available() throws IOException
available
in class InputStream
IOException
public long length() throws IOException
IOException
public long position() throws IOException
IOException
public void close() throws IOException
close
in interface Closeable
close
in interface AutoCloseable
close
in class InputStream
IOException
public void reset() throws IOException
reset
in class InputStream
IOException
Copyright © 2006–2019 SYSTAP, LLC DBA Blazegraph. All rights reserved.