您可以创建一个辅助方法来完全填充缓冲区。像这样的东西:
public int fillBufferCompletely(InputStream is, byte[] bytes) throws IOException {
int size = bytes.length;
int offset = 0;
while (offset < size) {
int read = is.read(bytes, offset, size - offset);
if (read == -1) {
if ( offset == 0 ) {
return -1;
} else {
return offset;
}
} else {
offset += read;
}
}
return size;
}
Run Code Online (Sandbox Code Playgroud)
然后你只需要传入一个 size 的缓冲区x。
迈克尔发布了一个函数的链接,该函数基本上执行相同的操作。与我的唯一区别是它确实能够返回小于缓冲区长度的内容,但仅限于流结束的情况。 DataInputStream.readFully在这种情况下会抛出运行时异常。
因此,如果该行为的示例有用,我将保留我的答案。