Java InputStream 中的 read() 和 readNBytes():究竟有什么区别?
从 java 的 InputStream 中读取数据:read() 与 readNBytes() 的区别
java 的 InputStream 提供了两种常见方法 read() 和 readNBytes() 来读取数据。虽然两者都被用于从流中读取字节,但它们有一些关键的区别。
read() 方法:
- 一次读取最多指定长度的字节。
- 返回实际读取的字节数或 -1(如果流已结束)。
- 该方法在流的末尾调用时,返回 -1。
readNBytes() 方法:
- 尝试读取指定长度的字节。
- 如果流已结束,则返回实际读取的字节数,当流中没有字节时返回 0。
- 该方法会多次调用 read() 直到读取到指定长度的字节或到达流的末尾。
关键区别:
- 读取的字节数:read() 可能会读取比指定长度更少的字节,而 readNBytes() 会尝试读取指定长度的字节。
- 返回值:read() 返回实际读取的字节数或 -1,而 readNBytes() 返回实际读取的字节数或 0(如果流已结束)。
- 行为上的差异:read() 不会尝试读取流中剩余的所有字节,而 readNBytes() 会。
总之,readNBytes() 比 read() 更贪婪,因为它会尝试读取尽可能多的字节。readNBytes() 的实现也更复杂,因为它需要在内部循环调用 read() 直到达到指定长度或流的末尾。
以上就是Java InputStream 中的 read() 和 readNBytes():究竟有什么区别?的详细内容,更多请关注其它相关文章!