首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用BufferedInputStream阅读方法

用BufferedInputStream阅读方法
EN

Stack Overflow用户
提问于 2021-12-12 11:08:19
回答 1查看 32关注 0票数 0

我在一个教程中看到,BufferedInputStream类中的int 读取(字节b []、int off、int len)本身使用read()方法读取数据。

因此,我的问题是,正常模式和不使用BufferedInputStream与使用缓冲区有什么区别?缓冲区应该以块形式读取字节,以降低成本,但这里是逐字节读取字节。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-12 13:24:15

确实,只需要实现读取单个字节的方法(即InputStream方法),就需要最简单的具体的InputStream.read()

对于这样的底层InputStream,使用BufferedInputStream也没有任何性能上的好处,因为BufferedInputStream.read(byte b [], int off, int len)依赖于InputStream.read(byte b [], int off, int len) (在InputStream中)依赖于InputStream.read()方法。

然而,

许多(大多数)使用的“典型”InputStream子类(例如,用于读取文件的java.io.FileInputStream、从网络连接读取数据的java.net.SocketInputStream、从zip文件读取数据的java.util.zip.ZipFile.ZipFileInputStrem )都实现了read(byte b [], int off, int len)方法。

对于使用InputStream的所有这些BufferedInputStream子类,在读取单个字节(即调用read()方法)时提供了巨大的性能好处,因为这些类执行系统调用来获取单个字节(FileInputStream),而其他类则分配长度为1的字节数组并调用read(byte[] b) (反过来调用read(b, 0, b.length))读取单个字节(SocketInputStreamZipFileInputStream)。

注意:我用作查找InputStream子类的基础项目有326个不同的InputStream子类。我并没有检查他们中的每一个人,以确定BufferedInputStream是否对他们有好处,我只是检查了我倾向于使用的那几个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70322996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档