Class InputBitStream
- All Implemented Interfaces:
BooleanIterator,Closeable,Flushable,AutoCloseable,Iterator<Boolean>
- Direct Known Subclasses:
DebugInputBitStream
public class InputBitStream extends Object implements BooleanIterator, Flushable, Closeable
This class wraps any InputStream so that you can treat it as
bit stream. Constructors and methods closely resemble those of
InputStream. Data can be read from such a stream in several ways:
reading a (long) natural number in fixed-width, unary, γ, shifted γ, δ, ζ and (skewed)
Golomb coding, or reading a number of bits that will be stored in a vector of
bytes. There is limited support for mark(int)/reset()
operations.
This class can also wrap a byte
array; this is much more lightweight than wrapping a FastByteArrayInputStream wrapping the array. Overflowing the array
will cause an EOFException.
Note that when reading using a vector of bytes bits are read in the
stream format (see OutputBitStream): the first bit is bit 7 of the
first byte, the eighth bit is bit 0 of the first byte, the ninth bit is bit
7 of the second byte and so on. When reading natural numbers using some coding,
instead, they are stored in the standard way, that is, in the lower
bits.
Additional features:
- This class provides an internal buffer. By setting a buffer of length 0 at creation time, you can actually bypass the buffering system: Note, however, that several classes providing buffering have synchronised methods, so using a wrapper instead of the internal buffer is likely to lead to a performance drop.
- To work around the schizophrenic relationship between streams and random
access files in
java.io, this class provides aflush()method that resets the internal state. At this point, you can safely reposition the underlying stream and read again afterwards. For instance, this is safe and will perform as expected:FileInputStream fis = new FileInputStream(...); InputBitStream ibs = new InputBitStream(fis); ... read operations on ibs ... ibs.flush(); fis.getChannel().position(...); ... other read operations on ibs ...
As a commodity, an instance of this class will try to cast the underlying byte stream to a
RepositionableStreamand to fetch by reflection theFileChannelunderlying the given input stream, in this order. If either reference can be successfully fetched, you can use directly theposition()method with argumentposwith the same semantics of aflush(), followed by a call toposition(pos / 8)(where the latter method belongs either to the underlying stream or to its underlying file channel), followed by askip(pos % 8). However, since the reflective checks are quite heavy they can be disabled using a suitable constructor. - Finally, this class implements partially the interface of a boolean iterator.
More precisely,
nextBoolean()will return the same bit asreadBit(), and also the same exceptions, whereashasNext()will always return true: you must be prepared to catch aRuntimeExceptionwrapping anIOExceptionin case the file ends. It is very difficult to implement completely an eager operator using a input-stream based model.
This class is not synchronised. If multiple threads access an instance of this class concurrently, they must be synchronised externally.
- Since:
- 0.1
- Author:
- Sebastiano Vigna
- See Also:
InputStream,OutputBitStream
-
Field Summary
Fields Modifier and Type Field Description protected intavailCurrent number of bytes available in the byte buffer.protected byte[]bufferThe stream buffer.static intDEFAULT_BUFFER_SIZEThe default size of the byte buffer in bytes (8Ki).static int[]DELTAprotected FileChannelfileChannelThe cached file channel underlyingis, if any.protected intfillCurrent number of bits in the bit buffer (stored low).static int[]GAMMAprotected InputStreamisThe underlyingInputStream.protected intposCurrent position in the byte buffer.protected longpositionCurrent position of the first byte in the byte buffer.protected RepositionableStreamrepositionableStreamiscast to a positionable stream, if possible.static int[]SHIFTED_GAMMAprotected booleanwrappingTrue if we are wrapping an array.static int[]ZETA_3 -
Constructor Summary
Constructors Modifier Constructor Description protectedInputBitStream()This (non-public) constructor exists just to provide fake initialisation for classes such asDebugInputBitStream.InputBitStream(byte[] a)Creates a new input bit stream wrapping a given byte array.InputBitStream(File file)Creates a new input bit stream reading from a file.InputBitStream(FileInputStream is)Creates a new input bit stream wrapping a given file input stream using a buffer of sizeDEFAULT_BUFFER_SIZE.InputBitStream(FileInputStream is, int bufSize)Creates a new input bit stream wrapping a given file input stream with a specified buffer size.InputBitStream(File file, int bufSize)Creates a new input bit stream reading from a file.InputBitStream(InputStream is)Creates a new input bit stream wrapping a given input stream using a buffer of sizeDEFAULT_BUFFER_SIZE.InputBitStream(InputStream is, boolean testForPosition)Creates a new input bit stream wrapping a given input stream using a buffer of sizeDEFAULT_BUFFER_SIZE.InputBitStream(InputStream is, int bufSize)Creates a new input bit stream wrapping a given input stream with a specified buffer size.InputBitStream(InputStream is, int bufSize, boolean testForPosition)Creates a new input bit stream wrapping a given input stream with a specified buffer size.InputBitStream(String name)Creates a new input bit stream reading from a file.InputBitStream(String name, int bufSize)Creates a new input bit stream reading from a file. -
Method Summary
Modifier and Type Method Description voidalign()Aligns the stream.longavailable()Returns the number of bits that can be read (or skipped over) from this bit stream without blocking by the next caller of a method.static booleancheckLength(String resource, int[] array, String resouceFullPath)voidclose()Closes the bit stream.voidcopyTo(OutputBitStream obs, long length)Copies a given number of bits from this input bit stream into a given output bit stream.voidflush()Flushes the bit stream.booleanhasNext()voidmark(int readLimit)Marks the current position in this input stream.booleanmarkSupported()booleannextBoolean()longposition()Returns this stream bit position.voidposition(long position)Sets this stream bit position, if it is based on aRepositionableStreamor on aFileChannel.voidread(byte[] bits, int len)Reads a sequence of bits.intreadBit()Reads a bit.longreadBits()Returns the number of bits read from this bit stream.voidreadBits(long readBits)Sets the number of bits read from this bit stream.intreadDelta()Reads a natural number in δ coding.voidreadDeltas(int[] a, int count)Reads a given amount of δ-coded natural numbers.intreadGamma()Reads a natural number in γ coding.voidreadGammas(int[] a, int count)Reads a given amount of γ-coded natural numbers.intreadGolomb(int b)Reads a natural number in Golomb coding.intreadGolomb(int b, int log2b)Reads a natural number in Golomb coding.intreadInt(int len)Reads a fixed number of bits into an integer.longreadLong(int len)Reads a fixed number of bits into a long.longreadLongDelta()Reads a long natural number in δ coding.longreadLongGamma()Reads a long natural number in γ coding.longreadLongGolomb(long b)Reads a long natural number in Golomb coding.longreadLongGolomb(long b, int log2b)Reads a long natural number in Golomb coding.longreadLongMinimalBinary(long b)Reads a long natural number in a limited range using a minimal binary coding.longreadLongMinimalBinary(long b, int log2b)Reads a long natural number in a limited range using a minimal binary coding.longreadLongNibble()Reads a long natural number in variable-length nibble coding.longreadLongShiftedGamma()Reads a natural number in shifted γ coding.longreadLongSkewedGolomb(long b)Reads a long natural number in skewed Golomb coding.longreadLongUnary()Reads a long natural number in unary coding.longreadLongZeta(int k)Reads a long natural number in ζ coding.intreadMinimalBinary(int b)Reads a natural number in a limited range using a minimal binary coding.intreadMinimalBinary(int b, int log2b)Reads a natural number in a limited range using a minimal binary coding.intreadNibble()Reads a natural number in variable-length nibble coding.intreadShiftedGamma()Reads a natural number in shifted γ coding.voidreadShiftedGammas(int[] a, int count)Reads a given amount of shifted-γ-coded natural numbers.intreadSkewedGolomb(int b)Reads a natural number in skewed Golomb coding.intreadUnary()Reads a natural number in unary coding.intreadZeta(int k)Reads a natural number in ζ coding.voidreadZetas(int k, int[] a, int count)Reads a given amount of γ-coded natural numbers.voidreset()Repositions this bit stream to the position at the time themark(int)method was last called.intskip(int n)Deprecated.This method is simply an expensive, try/catch-surrounded version ofskip(long)that is made necessary by the interface byBooleanIterator.longskip(long n)Skips the given number of bits.voidskipDeltas(int n)Skips a given amount of δ-coded natural numbers.voidskipDeltas(long n)Skips a given amount of δ-coded natural numbers.voidskipGammas(int n)Skips a given amount of γ-coded natural numbers.voidskipGammas(long n)Skips a given amount of γ-coded natural numbers.voidskipShiftedGammas(int n)Skips a given amount of shifted-γ-coded natural numbers.voidskipShiftedGammas(long n)Skips a given amount of shifted-γ-coded natural numbers.voidskipZetas(int k, int n)Skips a given amount of ζ-coded natural numbers.voidskipZetas(int k, long n)Skips a given amount of ζ-coded natural numbers.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface it.unimi.dsi.fastutil.booleans.BooleanIterator
forEachRemaining, forEachRemaining, next
-
Field Details
-
GAMMA
public static final int[] GAMMA -
DELTA
public static final int[] DELTA -
ZETA_3
public static final int[] ZETA_3 -
SHIFTED_GAMMA
public static final int[] SHIFTED_GAMMA -
DEFAULT_BUFFER_SIZE
public static final int DEFAULT_BUFFER_SIZEThe default size of the byte buffer in bytes (8Ki).- See Also:
- Constant Field Values
-
is
The underlyingInputStream. -
fileChannel
The cached file channel underlyingis, if any. -
repositionableStream
iscast to a positionable stream, if possible. -
wrapping
protected final boolean wrappingTrue if we are wrapping an array. -
buffer
protected byte[] bufferThe stream buffer. -
fill
protected int fillCurrent number of bits in the bit buffer (stored low). -
pos
protected int posCurrent position in the byte buffer. -
avail
protected int availCurrent number of bytes available in the byte buffer. -
position
protected long positionCurrent position of the first byte in the byte buffer.
-
-
Constructor Details
-
InputBitStream
protected InputBitStream()This (non-public) constructor exists just to provide fake initialisation for classes such asDebugInputBitStream. -
InputBitStream
Creates a new input bit stream wrapping a given input stream using a buffer of sizeDEFAULT_BUFFER_SIZE.This constructor performs the reflective tests that are necessary to support
position(long).- Parameters:
is- the input stream to wrap.
-
InputBitStream
Creates a new input bit stream wrapping a given input stream using a buffer of sizeDEFAULT_BUFFER_SIZE.- Parameters:
is- the input stream to wrap.testForPosition- if false, the reflective test that is necessary to supportposition(long)in caseisdoes not implementRepositionableStreamwill not be performed.
-
InputBitStream
Creates a new input bit stream wrapping a given input stream with a specified buffer size.This constructor performs the reflective tests that are necessary to support
position(long).- Parameters:
is- the input stream to wrap.bufSize- the size in byte of the buffer; it may be 0, denoting no buffering.
-
InputBitStream
Creates a new input bit stream wrapping a given input stream with a specified buffer size.- Parameters:
is- the input stream to wrap.bufSize- the size in byte of the buffer; it may be 0, denoting no buffering.testForPosition- if false, the reflective test that is necessary to supportposition(long)in caseisdoes not implementRepositionableStreamwill not be performed.
-
InputBitStream
Creates a new input bit stream wrapping a given file input stream using a buffer of sizeDEFAULT_BUFFER_SIZE.This constructor invokes directly
FileInputStream.getChannel()to supportposition(long).- Parameters:
is- the file input stream to wrap.
-
InputBitStream
Creates a new input bit stream wrapping a given file input stream with a specified buffer size.This constructor invokes directly
FileInputStream.getChannel()to supportposition(long).- Parameters:
is- the file input stream to wrap.bufSize- the size in byte of the buffer; it may be 0, denoting no buffering.
-
InputBitStream
public InputBitStream(byte[] a)Creates a new input bit stream wrapping a given byte array.- Parameters:
a- the byte array to wrap.
-
InputBitStream
Creates a new input bit stream reading from a file.This constructor invokes directly
FileInputStream.getChannel()to supportposition(long).- Parameters:
name- the name of the file.bufSize- the size in byte of the buffer; it may be 0, denoting no buffering.- Throws:
FileNotFoundException
-
InputBitStream
Creates a new input bit stream reading from a file.This constructor invokes directly
FileInputStream.getChannel()to supportposition(long).- Parameters:
name- the name of the file.- Throws:
FileNotFoundException
-
InputBitStream
Creates a new input bit stream reading from a file.This constructor invokes directly
FileInputStream.getChannel()to supportposition(long).- Parameters:
file- the file.- Throws:
FileNotFoundException
-
InputBitStream
Creates a new input bit stream reading from a file.This constructor invokes directly
FileInputStream.getChannel()to supportposition(long).- Parameters:
file- the file.bufSize- the size in byte of the buffer; it may be 0, denoting no buffering.- Throws:
FileNotFoundException
-
-
Method Details
-
checkLength
-
flush
public void flush()Flushes the bit stream. All state information associated with the stream is reset. This includes bytes prefetched from the stream, bits in the bit buffer and unget'd bits.This method is provided so that users of this class can easily wrap repositionable streams (for instance, file-based streams, which can be repositioned using the underlying
FileChannel). It is guaranteed that after calling this method the underlying stream can be repositioned, and that the next read will draw data from the stream. -
close
Closes the bit stream. All resources associated with the stream are released.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Throws:
IOException
-
available
Returns the number of bits that can be read (or skipped over) from this bit stream without blocking by the next caller of a method.- Returns:
- the number of bits that can be read from this bit stream without blocking.
- Throws:
IOException
-
readBits
public long readBits()Returns the number of bits read from this bit stream.- Returns:
- the number of bits read so far.
-
readBits
public void readBits(long readBits)Sets the number of bits read from this bit stream.This method is provided so that, for instance, the user can reset via
readBits(0)the read-bits count after aflush().- Parameters:
readBits- the new value for the number of bits read so far.
-
align
public void align()Aligns the stream. After a call to this function, the stream is byte aligned. Bits that have been read to align are discarded. -
read
Reads a sequence of bits. Bits will be read in the natural way: the first bit is bit 7 of the first byte, the eightth bit is bit 0 of the first byte, the ninth bit is bit 7 of the second byte and so on.- Parameters:
bits- an array of bytes to store the result.len- the number of bits to read.- Throws:
IOException
-
readBit
Reads a bit.- Returns:
- the next bit from the stream.
- Throws:
IOException
-
readInt
Reads a fixed number of bits into an integer.- Parameters:
len- a bit length.- Returns:
- an integer whose lower
lenbits are taken from the stream; the rest is zeroed. - Throws:
IOException
-
readLong
Reads a fixed number of bits into a long.- Parameters:
len- a bit length.- Returns:
- a long whose lower
lenbits are taken from the stream; the rest is zeroed. - Throws:
IOException
-
skip
Skips the given number of bits.- Parameters:
n- the number of bits to skip.- Returns:
- the actual number of skipped bits.
- Throws:
IOException
-
position
Sets this stream bit position, if it is based on aRepositionableStreamor on aFileChannel.Given an underlying stream that implements
RepositionableStreamor that can provide aFileChannelvia thegetChannel()method, a call to this method has the same semantics of aflush(), followed by a call toposition(position / 8)on the byte stream, followed by askip(position % 8).Note that this method does not change the value returned by
readBits().- Parameters:
position- the new position expressed as a bit offset.- Throws:
UnsupportedOperationException- if the underlying byte stream does not implementRepositionableStreamor if the channel it returns is not aFileChannel.IOException- See Also:
FileChannel.position(long)
-
position
public long position()Returns this stream bit position.- Returns:
- this stream bit position.
-
markSupported
public boolean markSupported()Tests if this stream supports themark(int)andreset()methods.This method will just delegate the test to the underlying
InputStream. -
mark
Marks the current position in this input stream. A subsequent call to thereset()method repositions this stream at the last marked position so that subsequent reads re-read the same bits.This method will just delegate the mark to the underlying
InputStream. Moreover, it will throw an exception if you try to mark outsite byte boundaries.- Parameters:
readLimit- the maximum limit of bytes that can be read before the mark position becomes invalid.- Throws:
IOException- if you try to mark outside byte boundaries.
-
reset
Repositions this bit stream to the position at the time themark(int)method was last called.This method will just
flush the streamand delegate the reset to the underlyingInputStream.- Throws:
IOException
-
readUnary
Reads a natural number in unary coding.- Returns:
- the next unary-encoded natural number.
- Throws:
IOException- See Also:
OutputBitStream.writeUnary(int)
-
readLongUnary
Reads a long natural number in unary coding. Note that by unary coding we mean that 1 encodes 0, 01 encodes 1 and so on.- Returns:
- the next unary-encoded long natural number.
- Throws:
IOException- See Also:
OutputBitStream.writeUnary(int)
-
readGamma
Reads a natural number in γ coding.- Returns:
- the next γ-encoded natural number.
- Throws:
IOException- See Also:
OutputBitStream.writeGamma(int),skipGammas(int)
-
readLongGamma
Reads a long natural number in γ coding.- Returns:
- the next γ-encoded long natural number.
- Throws:
IOException- See Also:
OutputBitStream.writeGamma(int),skipGammas(int)
-
skipGammas
Skips a given amount of γ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadGamma()orreadLongGamma(), as precomputed tables are used directly, so the number of method calls is greatly reduced, and the result is discarded, soskip(long)can be invoked instead of more specific decoding methods.- Parameters:
n- the number of γ-coded natural numbers to be skipped.- Throws:
IOException- See Also:
readGamma()
-
skipGammas
Skips a given amount of γ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadGamma()orreadLongGamma(), as precomputed tables are used directly, so the number of method calls is greatly reduced, and the result is discarded, soskip(long)can be invoked instead of more specific decoding methods.- Parameters:
n- the number of γ-coded natural numbers to be skipped.- Throws:
IOException- See Also:
readGamma()
-
readGammas
Reads a given amount of γ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadGamma(), as precomputed tables are used directly, so the number of method calls is greatly reduced.- Parameters:
a- an array of at leastcountintegers where the result will be written starting at the first position.count- the number of γ-coded natural numbers to be read.- Throws:
IOException- See Also:
readGamma()
-
readShiftedGamma
Reads a natural number in shifted γ coding.- Returns:
- the next shifted-γ–encoded natural number.
- Throws:
IOException- See Also:
OutputBitStream.writeShiftedGamma(int),skipShiftedGammas(int)
-
readLongShiftedGamma
Reads a natural number in shifted γ coding.- Returns:
- the next shifted-γ–encoded natural number.
- Throws:
IOException- See Also:
OutputBitStream.writeShiftedGamma(int),skipShiftedGammas(int)
-
skipShiftedGammas
Skips a given amount of shifted-γ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadShiftedGamma()orreadLongShiftedGamma(), as precomputed tables are used directly, so the number of method calls is greatly reduced, and the result is discarded, soskip(long)can be invoked instead of more specific decoding methods.- Parameters:
n- the number of shifted-γ-coded natural numbers to be skipped.- Throws:
IOException- See Also:
readShiftedGamma()
-
skipShiftedGammas
Skips a given amount of shifted-γ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadShiftedGamma()orreadLongShiftedGamma(), as precomputed tables are used directly, so the number of method calls is greatly reduced, and the result is discarded, soskip(long)can be invoked instead of more specific decoding methods.- Parameters:
n- the number of shifted-γ-coded natural numbers to be skipped.- Throws:
IOException- See Also:
readShiftedGamma()
-
readShiftedGammas
Reads a given amount of shifted-γ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadShiftedGamma(), as precomputed tables are used directly, so the number of method calls is greatly reduced.- Parameters:
a- an array of at leastcountintegers where the result will be written starting at the first position.count- the number of shifted-γ-coded natural numbers to be read.- Throws:
IOException- See Also:
readShiftedGamma()
-
readDelta
Reads a natural number in δ coding.- Returns:
- the next δ-encoded natural number.
- Throws:
IOException- See Also:
OutputBitStream.writeDelta(int),skipDeltas(int)
-
readLongDelta
Reads a long natural number in δ coding.- Returns:
- the next δ-encoded long natural number.
- Throws:
IOException- See Also:
OutputBitStream.writeDelta(int),skipDeltas(int)
-
skipDeltas
Skips a given amount of δ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadDelta()orreadLongDelta(), as precomputed tables are used directly, so the number of method calls is greatly reduced, and the result is discarded, soskip(long)can be invoked instead of more specific decoding methods.- Parameters:
n- the number of δ-coded natural numbers to be skipped.- Throws:
IOException- See Also:
readDelta()
-
skipDeltas
Skips a given amount of δ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadDelta()orreadLongDelta(), as precomputed tables are used directly, so the number of method calls is greatly reduced, and the result is discarded, soskip(long)can be invoked instead of more specific decoding methods.- Parameters:
n- the number of δ-coded natural numbers to be skipped.- Throws:
IOException- See Also:
readDelta()
-
readDeltas
Reads a given amount of δ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadDelta(), as precomputed tables are used directly, so the number of method calls is greatly reduced.- Parameters:
a- an array of at leastcountintegers where the result will be written starting at the first position.count- the number of δ-coded natural numbers to be read.- Throws:
IOException- See Also:
readDelta()
-
readMinimalBinary
Reads a natural number in a limited range using a minimal binary coding.- Parameters:
b- a strict upper bound.- Returns:
- the next minimally binary encoded natural number.
- Throws:
IllegalArgumentException- if you try to read a negative number or use a nonpositive base.IOException- See Also:
OutputBitStream.writeMinimalBinary(int, int)
-
readMinimalBinary
Reads a natural number in a limited range using a minimal binary coding. This method is faster thanreadMinimalBinary(int)because it does not have to computelog2b.- Parameters:
b- a strict upper bound.log2b- the floor of the base-2 logarithm of the bound.- Returns:
- the next minimally binary encoded natural number.
- Throws:
IllegalArgumentException- if you try to read a negative number or use a nonpositive base.IOException- See Also:
OutputBitStream.writeMinimalBinary(int, int)
-
readLongMinimalBinary
Reads a long natural number in a limited range using a minimal binary coding.- Parameters:
b- a strict upper bound.- Returns:
- the next minimally binary encoded long natural number.
- Throws:
IllegalArgumentException- if you try to read a negative number or use a nonpositive base.IOException- See Also:
OutputBitStream.writeMinimalBinary(int, int)
-
readLongMinimalBinary
Reads a long natural number in a limited range using a minimal binary coding. This method is faster thanreadLongMinimalBinary(long)because it does not have to computelog2b.- Parameters:
b- a strict upper bound.log2b- the floor of the base-2 logarithm of the bound.- Returns:
- the next minimally binary encoded long natural number.
- Throws:
IllegalArgumentException- if you try to read a negative number or use a nonpositive base.IOException- See Also:
OutputBitStream.writeMinimalBinary(int, int)
-
readGolomb
Reads a natural number in Golomb coding.This method implements also the case in which
bis 0: in this case, nothing will be read, and 0 will be returned.- Parameters:
b- the modulus for the coding.- Returns:
- the next Golomb-encoded natural number.
- Throws:
IllegalArgumentException- if you use a nonpositive modulus.IOException- See Also:
OutputBitStream.writeGolomb(int, int)
-
readGolomb
Reads a natural number in Golomb coding. This method is faster thanreadGolomb(int)because it does not have to computelog2b.This method implements also the case in which
bis 0: in this case, nothing will be read, and 0 will be returned.- Parameters:
b- the modulus for the coding.log2b- the floor of the base-2 logarithm of the coding modulus.- Returns:
- the next Golomb-encoded natural number.
- Throws:
IllegalArgumentException- if you use a nonpositive modulus.IOException- See Also:
OutputBitStream.writeGolomb(int, int)
-
readLongGolomb
Reads a long natural number in Golomb coding.This method implements also the case in which
bis 0: in this case, nothing will be read, and 0 will be returned.- Parameters:
b- the modulus for the coding.- Returns:
- the next Golomb-encoded long natural number.
- Throws:
IllegalArgumentException- if you use a nonpositive modulus.IOException- See Also:
OutputBitStream.writeGolomb(int, int)
-
readLongGolomb
Reads a long natural number in Golomb coding. This method is faster thanreadLongGolomb(long)because it does not have to computelog2b.This method implements also the case in which
bis 0: in this case, nothing will be read, and 0 will be returned.- Parameters:
b- the modulus for the coding.log2b- the floor of the base-2 logarithm of the coding modulus.- Returns:
- the next Golomb-encoded long natural number.
- Throws:
IllegalArgumentException- if you use a nonpositive modulus.IOException- See Also:
OutputBitStream.writeGolomb(int, int)
-
readSkewedGolomb
Reads a natural number in skewed Golomb coding.This method implements also the case in which
bis 0: in this case, nothing will be read, and 0 will be returned.- Parameters:
b- the modulus for the coding.- Returns:
- the next skewed Golomb-encoded natural number.
- Throws:
IllegalArgumentException- if you use a negative modulus.IOException- See Also:
OutputBitStream.writeSkewedGolomb(int, int)
-
readLongSkewedGolomb
Reads a long natural number in skewed Golomb coding.This method implements also the case in which
bis 0: in this case, nothing will be read, and 0 will be returned.- Parameters:
b- the modulus for the coding.- Returns:
- the next skewed Golomb-encoded long natural number.
- Throws:
IllegalArgumentException- if you use a negative modulus.IOException- See Also:
OutputBitStream.writeSkewedGolomb(int, int)
-
readZeta
Reads a natural number in ζ coding.- Parameters:
k- the shrinking factor.- Returns:
- the next ζ-encoded natural number.
- Throws:
IllegalArgumentException- if you use a nonpositive shrinking factor.IOException- See Also:
OutputBitStream.writeZeta(int, int)
-
readLongZeta
Reads a long natural number in ζ coding.- Parameters:
k- the shrinking factor.- Returns:
- the next ζ-encoded long natural number.
- Throws:
IllegalArgumentException- if you use a nonpositive shrinking factor.IOException- See Also:
OutputBitStream.writeZeta(int, int)
-
skipZetas
Skips a given amount of ζ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadZeta(int)orreadLongZeta(int), as precomputed tables are used directly, so the number of method calls is greatly reduced, and the result is discarded, soskip(long)can be invoked instead of more specific decoding methods.- Parameters:
k- the shrinking factor.n- the number of ζ-coded natural numbers to be skipped.- Throws:
IOException- See Also:
readZeta(int)
-
skipZetas
Skips a given amount of ζ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadZeta(int)orreadLongZeta(int), as precomputed tables are used directly, so the number of method calls is greatly reduced, and the result is discarded, soskip(long)can be invoked instead of more specific decoding methods.- Parameters:
k- the shrinking factor.n- the number of ζ-coded natural numbers to be skipped.- Throws:
IOException- See Also:
readZeta(int)
-
readZetas
Reads a given amount of γ-coded natural numbers.This method should be significantly quicker than iterating
ntimes onreadGamma(), as precomputed tables are used directly, so the number of method calls is greatly reduced.- Parameters:
k- the shrinking factor.a- an array of at leastcountintegers where the result will be written starting at the first position.count- the number of ζ-coded natural numbers to be read.- Throws:
IOException- See Also:
readGamma()
-
readNibble
Reads a natural number in variable-length nibble coding.- Returns:
- the next variable-length nibble-encoded natural number.
- Throws:
IOException- See Also:
OutputBitStream.writeNibble(int)
-
readLongNibble
Reads a long natural number in variable-length nibble coding.- Returns:
- the next variable-length nibble-encoded long natural number.
- Throws:
IOException- See Also:
OutputBitStream.writeNibble(int)
-
hasNext
public boolean hasNext() -
nextBoolean
public boolean nextBoolean()- Specified by:
nextBooleanin interfaceBooleanIterator
-
skip
Deprecated.This method is simply an expensive, try/catch-surrounded version ofskip(long)that is made necessary by the interface byBooleanIterator.Skips over the given number of bits.- Specified by:
skipin interfaceBooleanIterator- Parameters:
n- the number of bits to skip.- Returns:
- the number of bits actually skipped.
-
copyTo
Copies a given number of bits from this input bit stream into a given output bit stream.- Parameters:
obs- an output bit stream.length- the number of bits to copy.- Throws:
EOFException- if there are not enough bits to copy.IOException
-