私はRandomAccessFile raFile
固定サイズのチャンクでバッファにデータを読み込んでいます:
byte[] fileBuffer = new byte[BUFFER_SIZE];
while((readBytes = raFile.read(fileBuffer) >= 0) {
String bufferStr = new String(fileBuffer, 0, readBytes);
String testerStr = new String(fileBuffer);
System.out.println(readBytes+","+bufferStr.length()+","+testerStr.length());
}
私が期待していたのは、 (ファイルの末尾を除く) と同じraFile.read()
バイト数を読み取り、同じ値を にコピーすることでした。これはほとんど正しいですが、ときどき、4096の a に対して次の出力が得られます。BUFFER_SIZE
readBytes
BUFFER_SIZE
readBytes
bufferStr
testerStr
4096 4092 4092
4096 4090 4090
4096 4094 4094
4096 4095 4095
4096 バイトを読み取っている場合、ファイルの終わりでなくても、長さがこの値以下になるのはなぜbufferStr
ですかtesterStr
?
参照:これread()
は、バッファに読み込まれた合計バイト数を返すと言います。