public class BitInputStream
extends java.io.InputStream
-- revision history -- $Log: BitInputStream.java,v $ Revision 1.5 2002/12/07 00:00:00 dangan [maintenance] ソース整備 Revision 1.4 2002/11/15 00:00:00 dangan [improvement] prefetchBits() が 32bit の読み込みを保証するように修正 [change] メソッド名の変更 prefetchBit -> peekBit prefetchBoolean -> peekBoolean prefetchBits -> peekBits Revision 1.3 2002/11/02 00:00:00 dangan [bug fix] available() availableBits() で ブロックせずに読み込める量よりも大きい値を返していた。 Revision 1.2 2002/09/05 00:00:00 dangan [change] EndOfStream に達した後の read( new byte[0] ) や read( byte[] buf, int off, 0 ) の戻り値を InputStream と同じく 0 になるようにした Revision 1.1 2002/09/04 00:00:00 dangan [bug fix] skip( len ) と skipBits( len ) で len が 0 未満のとき 正しく処理できていなかった。 Revision 1.0 2002/09/03 00:00:00 dangan add to version control [bug fix] mark() で 接続された in に渡す readLimit の計算が甘かったため、 要求された readLimit に達する前にマーク位置が破棄される事があった。 EndOfStream に達した後の skip() および skip( 0 ) が -1 を返していた。 [maintenance] タブ廃止 ライセンス文の修正
Constructor and Description |
---|
BitInputStream(java.io.InputStream in)
入力ストリーム in からのデータをビット単位で
読み込めるようなストリームを構築する。
|
BitInputStream(java.io.InputStream in,
int CacheSize)
入力ストリーム in からのデータをビット単位で
読み込めるようなストリームを構築する。
|
Modifier and Type | Method and Description |
---|---|
int |
available()
接続された入力ストリームからブロックしないで
読み込むことのできるバイト数を得る。
|
int |
availableBits()
接続された入力ストリームからブロックしないで
読み込むことのできるビット数を得る。
|
void |
close()
この入力ストリームを閉じ、
使用していたリソースを開放する。
|
void |
mark(int readLimit)
接続された入力ストリームの現在位置にマークを設定し、
reset() メソッドでマークした時点の 読み込み位置に
戻れるようにする。
|
boolean |
markSupported()
接続された入力ストリームが mark() と reset() を
サポートするかを得る。
|
int |
peekBit()
読み込み位置を変えずに 1ビットのデータを先読みする。
|
int |
peekBits(int count)
読み込み位置を変えずに count ビットのデータを先読みする。
戻り値が int型であることからもわかるように 最大有効ビット数は 32ビットである。 EndOfStream 付近を除いて、先読み出来ることが保障されるのは 32ビットである。(ビットバッファの大きさが 32ビットであるため) もし 32ビット以上の先読み機能が必須となる場合は その都度 mark()、readBits()、reset() を繰り返すか、 このクラスを使用することを諦めること。 |
boolean |
peekBoolean()
読み込み位置を変えずに 1ビットのデータを
真偽値として先読みする。
|
int |
read()
接続されたストリームから 8ビットのデータを読み込む。
|
int |
read(byte[] buffer)
接続された入力ストリームから バイト配列 buffer を
満たすようにデータを読み込む。
データは必ずしも buffer を満たすとは限らないことに注意。 |
int |
read(byte[] buffer,
int index,
int length)
接続された入力ストリームから バイト配列 buffer の
index で指定された位置から length バイトのデータを
読み込む。
このメソッドは lengthバイト読み込むか、 EndOfStream に到達するまでブロックする。 データは必ずしも length バイト読み込まれるとは限ら ないことに注意。 |
int |
readBit()
接続された入力ストリームから 1ビットのデータを
読み込む。
|
int |
readBits(int count)
接続された入力ストリームから count ビットのデータを
読み込む。 戻り値が int値である事からも判るように
読み込むことのできる 最大有効ビット数は 32ビットで
あるが、count は32以上の値を設定してもチェックを
受けないため それ以上の値を設定した場合は ビット
データが読み捨てられる。
たとえば readBits( 33 ) としたときは まず1ビットの データを読み捨て、その後の 32ビットのデータを返す。 また count に 0以下の数字を設定して呼び出した場合、 データを読み込む動作を伴わないため 戻り値は 常に0、 EndOfStream に達していても EOFException を 投げない点に注意すること。 |
boolean |
readBoolean()
接続された入力ストリームから 1ビットのデータを
真偽値として読み込む。
|
void |
reset()
接続された入力ストリームの読み込み位置を最後に
mark() メソッドが呼び出されたときの位置に設定する。
|
long |
skip(long length)
接続された入力ストリームのデータを length バイト
読み飛ばす。
このメソッドは lengthバイト読み飛ばすか、 EndOfStream に到達するまでブロックする。 データは必ずしも length バイト読み飛ばされるとは限ら ないことに注意。 |
int |
skipBits(int count)
接続されたストリームから count ビットのデータを
読み飛ばす。
|
public BitInputStream(java.io.InputStream in)
in
- 入力ストリームpublic BitInputStream(java.io.InputStream in, int CacheSize)
in
- 入力ストリームCacheSize
- バッファサイズpublic int read() throws java.io.IOException
read
in class java.io.InputStream
java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合BitDataBrokenException
- EndOfStreamに達したため
要求されたビット数のデータの
読み込みに失敗した場合。public int read(byte[] buffer) throws java.io.IOException
read
in class java.io.InputStream
buffer
- 読み込まれたデータを格納するためのバイト配列java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合BitDataBrokenException
- EndOfStreamに達したため
要求されたビット数のデータの
読み込みに失敗した場合。public int read(byte[] buffer, int index, int length) throws java.io.IOException
read
in class java.io.InputStream
buffer
- 読み込まれたデータを格納するためのバイト配列index
- buffer内のデータ読み込み開始位置length
- bufferに読み込むデータ量java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合BitDataBrokenException
- EndOfStreamに達したため
要求されたビット数のデータの
読み込みに失敗した場合。public long skip(long length) throws java.io.IOException
skip
in class java.io.InputStream
length
- 読み飛ばすバイト数。java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合public void mark(int readLimit)
mark
in class java.io.InputStream
readLimit
- マーク位置に戻れる限界のバイト数。
このバイト数を超えてデータを読み
込んだ場合 reset()できなくなる可
能性がある。public void reset() throws java.io.IOException
reset
in class java.io.InputStream
java.io.IOException
- public boolean markSupported()
markSupported
in class java.io.InputStream
public int available() throws java.io.IOException
available
in class java.io.InputStream
java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合public void close() throws java.io.IOException
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
close
in class java.io.InputStream
java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合public int readBit() throws java.io.IOException
java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合public boolean readBoolean() throws java.io.IOException
java.io.EOFException
- 既にEndOfStreamに達していた場合java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合public int readBits(int count) throws java.io.IOException
count
- 読み込むデータのビット数java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合java.io.EOFException
- 既にEndOfStreamに達していた場合BitDataBrokenException
- 読み込み途中で EndOfStreamに達したため
要求されたビット数のデータの読み込み
に失敗した場合。public int skipBits(int count) throws java.io.IOException
count
- 読み飛ばしてほしいビット数java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合public int peekBit() throws java.io.IOException
java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合public boolean peekBoolean() throws java.io.IOException
java.io.EOFException
- 既にEndOfStreamに達していた場合java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合public int peekBits(int count) throws java.io.IOException
count
- 読み込むビット数java.io.EOFException
- 既にEndOfStreamに達していた場合java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合NotEnoughBitsException
- count が先読み可能な範囲外の場合public int availableBits() throws java.io.IOException
java.io.IOException
- 接続された入力ストリームで
入出力エラーが発生した場合
When you found typographical errors or omissions, Please mail to cqw10305@nifty.com
The company name and product name which are used in this document, it is the trademark or registered trademark of each company generally.
Copyright © 2001-2002 Michel Ishizuka. All Rights Reserved.