全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス
java.lang.Object | +----java.io.InputStream | +----java.io.FilterInputStream | +----java.io.LineNumberInputStream
このクラスは入力ストリームフィルタであり、現在の行番号を監視して保持する機能が追加されています。
行とはバイトの連なりであり、その最後に復帰文字('\r'
)か、改行文字('\n'
)か、または復帰文字の直後に改行文字が現れます。これら3種類のケースにおいて、行を終了させる文字は一個の改行文字として返されます。
行番号は 0
から始まり、read
が改行文字を返すたびに 1
ずつ増えて行きます。
b.length
バイトのデータを読み込む。
mark
メソッドが呼び出された時点のマーク位置へストリームを再設定する。
n
バイトだけスキップしてその範囲のデータを捨てる。
public LineNumberInputStream(InputStream in)
public int read() throws IOException
0
から 255
の値をとる int
として返されます。ストリームの終端に達して読み込むデータが存在しない場合は -1
を返します。このメソッドはデータが読み込み可能になるか、ストリームの終端が検出されるか、または例外がスローされるまでブロックします。
LineNumberInputStream
の read
メソッドはその下層入力ストリームの read
メソッドを呼び出します。入力に現れる復帰文字と改行文字をチェックして適切な行番号を保ちます。復帰文字と復帰+改行文字は1個の改行文字へ付け替えられます。
-1
。
public int read(byte b[], int off, int len) throws IOException
len
バイトのデータを読み込みます。このメソッドは入力が可能になるまでブロックします。
LineNumberInputStream
の read
メソッドは引数を取らない read メソッドを繰り返し呼び出して配列に書き込みます
-1
。
public void setLineNumber(int lineNumber)
public int getLineNumber()
public long skip(long n) throws IOException
n
バイトだけスキップしてその範囲のデータを捨てます。種々の理由により skip
メソッドは指定されたよりも小さな(0
の場合もあり)バイト数しかスキップしないことがあります。実際にスキップしたバイト数が返されます。
LineNumberInputStream
の skip
メソッドは長さ n
のバイト配列を作成して、そこに n
バイトのデータを書き終えるか、またはストリームの終端に達するまで読み込みを続けます。
public int available() throws IOException
下層の入力ストリームからブロッキングの発生なしに k 個の文字を入力可能だったとすると、LineNumberInputStream
がブロッキングなしに読み込み可能な文字数は k/2 となることに注意してください。これは、下層入力ストリームからの k個の文字は k/2 対の '\r'
と '\n'
である可能性があり、これが k/2 個の '\n'
文字に変換されるかも知れないからです。
public void mark(int readlimit)
reset
メソッドを呼び出すと最後にマークを付けられた位置にストリームを再設定しますから、次回の読み込み操作は同じバイトから読み込むことになります。
LineNumberInputStream
の mark
メソッドは private 変数に現在の行番号を記録してから、下層入力ストリームの mark
メソッドを呼び出します。
public void reset() throws IOException
mark
メソッドが呼び出されたときのマーク位置へこのストリームの位置を再設定します。
LineNumberInputStream
の reset
メソッドはまず行番号を mark
メソッドが呼び出された時点の値にリセットし、それから下層入力ストリームの reset
メソッドを呼び出します。
ストリームのマークは、ストリームに何が含まれているかをチェックするために少しデータを先読みするために使われます。これを最も容易に実行する方法は一般的なパーザを動かすことです。 ストリームがパーザで取り扱えるタイプならば、これですべてうまく行きます。 ストリームがこのようなタイプではない場合は、パーザが失敗した場所で例外を発生します。もし readlimit バイトの範囲内でこれが発生した場合は、例外を検知した外部コードがストリームをリセットして、別なパーザで再トライすることができます。
全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス