如果在读取操作期间或在后续调用中达到 EOF,read() 是否返回 -1?Java 文档对此并不完全清楚,我正在阅读的书也不是。
本书中的以下代码正在读取具有三种不同类型的重复值的文件,一个双精度值,一个可变长度的字符串和一个二进制长整数。缓冲区应该填充在任何值中间的某个随机位置,代码将处理它。我不明白的是,如果在读取操作期间返回 -1 ,则最后一个值不会在 prinf 语句中得到输出。
try(ReadableByteChannel inCh = Files.newByteChannel(file)) {
ByteBuffer buf = ByteBuffer.allocateDirect(256);
buf.position(buf.limit());
int strLength = 0;
byte[] strChars = null;
while(true) {
if(buf.remaining() < 8) {
if(inCh.read(buf.compact()) == -1) {
break;
}
buf.flip();
}
strLength = (int)buf.getDouble();
if (buf.remaining() < 2*strLength) {
if(inCh.read(buf.compact()) == -1) {
System.err.println("EOF found while reading the prime string.");
break;
}
buf.flip();
}
strChars = new byte[2*strLength];
buf.get(strChars);
if(buf.remaining() <8) {
if(inCh.read(buf.compact()) == -1) {
System.err.println("EOF found reading the binary prime value.");
break;
}
buf.flip();
}
System.out.printf("String length: %3s String: %-12s Binary Value: %3d%n",
strLength, ByteBuffer.wrap(strChars).asCharBuffer(), buf.getLong());
}
System.out.println("\n EOF Reached.");