java-BufferedInputStream如何使读取操作更快?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-BufferedInputStream如何使读取操作更快?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1683字,纯文字阅读大概需要3分钟。
内容图文
![java-BufferedInputStream如何使读取操作更快?](/upload/InfoBanner/zyjiaocheng/658/bf145b6f955f46f78d3532274112b4d5.jpg)
我知道将BufferedInpurStream包裹在FileInputStream周围可以使读取操作更快,但是尝试
我去看了BufferedInpurStream的源代码并得到了一些东西.这是我的
理解
InputStream in = new BufferedInpurStream(new FileInputStream(filename));
int byteToRead;
while((byteToRead = in.read()) != -1)
当我执行bufferedInpurStream.read()时,在内部,它将首先一次读取字节块以进入缓冲区,然后
从缓冲区中逐个读取每个字节,而不是从文件中读取(更昂贵).一旦缓冲区为空
它将再次用字节块填充??它
而使用FileInputStream.read()时,对文件中的每个字节逐个执行读取操作,这是非常昂贵的
这种理解正确吗?
解决方法:
通常,read(byte [] b)(或read(byte [] b,int off,int len))比read()更可取,因为它可能具有一些IO性能优势.
而且,如果您使用read(byte [] b),则只要使用相同的缓冲区大小,BufferedInpurStream就没有任何实际优势.
void read(InputStream inputStream, int bufferSize) throws IOException
{
byte[] buffer = new byte[bufferSize];
int read;
while ((read = inputStream.read(buffer)) != -1)
{
// do some work
}
}
和
void read2(InputStream inputStream, int bufferSize) throws IOException
{
BufferedInputStream bis = new BufferedInputStream(inputStream, bufferSize);
try
{
byte[] buffer = new byte[bufferSize];
int read;
while ((read = bis .read(buffer)) != -1)
{
// do some work
}
}
finally
{
bis.close();
}
}
尝试阅读和阅读2.您会发现,只要使用适当的缓冲区大小,将结果包装到BufferedInputStream不会提高性能. (实际上,这会带来另外的计算成本…)
那么,什么时候需要BufferedInputStream?
这是我的建议:
>如果您知道“适当的”缓冲区大小,请直接处理它.它产生较短的代码.
(例如:文件读取.您可以将文件大小用作缓冲区大小.)
>如果您不知道“合适的”缓冲区大小,或者必须将InputStream传递给另一个库,则将流包装为BufferedInputStream.
您可能会受益于缓冲. (例如:Web文件传输.服务器可能不提供“内容长度”字段.)
内容总结
以上是互联网集市为您收集整理的java-BufferedInputStream如何使读取操作更快?全部内容,希望文章能够帮你解决java-BufferedInputStream如何使读取操作更快?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。