Java InputStream 中 read() 和 readNBytes() 的区别:何时该选择哪种读取方法?
ID:17294 / 打印
Java 的 InputStream 中 read() 和 readNBytes() 的区别
Java 的 InputStream 具有两个相关的读取方法:read() 和 readNBytes()。虽然它们都用于读取数据,但它们有细微的区别。
read(byte[] b, int off, int len)
- 从流中读取最多 len 个字节,并将它们存储在字节数组 b 的偏移量 off 开始处。
- 返回实际读取的字节数(可能少于 len)。
- 如果在读取第一个字节时遇到流的结尾,则返回 -1。
readNBytes(byte[] b, int off, int len)
立即学习“Java免费学习笔记(深入)”;
- 尝试读取恰好 len 个字节,并将它们存储在字节数组 b 的偏移量 off 开始处。
- 内部循环调用 read() 方法,直到读取到 len 个字节或到达流的结尾。
- 返回实际读取的字节数。如果在读取过程中达到流的结尾,则返回值为 0。
关键区别
- 读取的 字节数: read() 可能会读取少于 len 个字节,而 readNBytes() 总会尝试读取 len 个字节。
- 返回值: read() 在达到流的结尾时返回 -1,而 readNBytes() 返回实际读取的字节数(可能为 0)。
- 行为: readNBytes() 比 read() 更加“贪心”,它确保尽量读取指定数量的字节。
总之,readNBytes() 提供了一种更健壮的方法来读取确切数量的字节,即使在需要多次调用 read() 的情况下。而 read() 则更容易实现,但需要更加注意文件结尾。选择哪种方法取决于具体的需求和性能考虑。
作者:admin @ 24资源网 2024-11-27
本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com