私は自分の思考の結び目を持っています...私は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()
という事実から生じました。私はこの値が文字列に読み込まれた最後の位置を表していると誤解していました。これは大きなストリームに読み込まれた位置です。私のおっぱいを整理してくれてありがとう。
" "? 'readLine'が単一の行ではなく完全な文字列を返すことを意味していますか? – Lothar
あなたはそれが行の最後に止まらないと思いますか?なぜバイナリデータを文字列に読み込みたいのですが、私は試してみて、最初の行だけを読み込みます。あなたのコードをもっと投稿してください。 – Oleg