2017-09-05 8 views
0

私は自分の思考の結び目を持っています...私はint 0をファイルに3回書いています。試した\ n(0x0A)と\ r(0x0D))。ここでは、ファイルの内容が後ろにそれを読むためにバイト単位でreadlineはファイル内で nまたは rを無視します(テキスト対バイナリ)

00 00 00 00 0D 00 00 00 00 0D 00 00 00 00 0D

ですが、私は、しかし

FileInputStream is = new FileInputStream(theFile); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

を包みます

String s = br.readLine(); 

への私の最初の呼び出しでは、ファイル(15位)よりもむしろ、私が期待していたように、位置5(すなわち0x0Dが)で停止の最後まで読み込みます。誰かが私が物事の仕方を誤解しているところを見ますか?とても感謝しております。以下のコメントをもとに

追加情報:コードは

public class TestApp4 { 
    public static void main(String args[]) { 
    try { 
     File theFile = new File("Test.dat"); 
     FileInputStream is = new FileInputStream(theFile); 
     BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
     System.out.println("input stream position: " + is.getChannel().position()); 
     String s = br.readLine(); 
     byte[] bs = s.getBytes(); 
     int i = ByteBuffer.wrap(bs).getInt(); 
     System.out.println("input stream position: " + is.getChannel().position()); 
     System.out.println("line: " + i); 
     s = br.readLine(); 
     System.out.println("line: "); 
     s = br.readLine(); 
     System.out.println("line: "); 
     br.close(); 
    } catch (Throwable e) { e.printStackTrace(); } 
    } 
} 

である私はこのことから得る出力は

input stream position: 0 
input stream position: 15 
line: 0 
line: 
line: 

であると私は間違っていたところ、私は参照してください。それぞれ

が正確にどこで壊れているかを示します。私の混乱は、行末ではなくファイルの最後に進んだ

is.getChannel().position() 

という事実から生じました。私はこの値が文字列に読み込まれた最後の位置を表していると誤解していました。これは大きなストリームに読み込まれた位置です。私のおっぱいを整理してくれてありがとう。

+0

" "? 'readLine'が単一の行ではなく完全な文字列を返すことを意味していますか? – Lothar

+0

あなたはそれが行の最後に止まらないと思いますか?なぜバイナリデータを文字列に読み込みたいのですが、私は試してみて、最初の行だけを読み込みます。あなたのコードをもっと投稿してください。 – Oleg

答えて

0

InputStreamReaderおよびBufferedReaderは、他の処理を行う前に内部バッファを満たしています。したがって、BufferedReader#readLineと呼ぶと、最初の改行までの文字だけでなく、さらに多くのデータが読み込まれます。どちらのクラスも、何千バイトものバッファ(InputStreamReader)とchars(BufferedReader)のバッファで動作するため、最初にそのメソッドを呼び出すと、すぐに15バイトのファイルの最後に到達します。

少なくとも、「ファイルの最後まで読み込む」と書いたときに、それを読んでいるのです。私が間違っていると思ったら、より正確な質問をしてください(理想的には、あなたが何を離れて、私たちの側で解釈の必要性を示しているかを示すコードで)

+0

おかげでロタール、あなたは完全にお金になっていた。 –

関連する問題