RandomAccessFile.readFully docs说
“此方法从文件中重复读取,直到请求的数字 读取字节数。此方法将阻塞,直到请求的数量为止 读取字节,检测流的末尾或异常 抛出“。
我喜欢FileChannel.read的类似行为,但不确定正确的方法来保证它。
答案 0 :(得分:0)
标题中的问题答案是“不”。只有合同才能转移至少一个字节。如果你想要更多,你必须循环,直到你得到它们。
答案 1 :(得分:0)
我找不到现有的实用工具方法,所以这里是一个未经过良好测试的实现
void readFully(FileChannel file, ByteBuffer buf) throws IOException {
int n = buf.remaining();
int toRead = n;
while (n > 0) {
int amt = file.read(buf);
if (amt == -1) {
int read = toRead - n;
throw new EOFException("reached end of stream after reading "
+ read + " bytes; " + toRead + " bytes expected");
} else {
n -= amt;
}
}
}