当前位置: 首页 > 面试题库 >

BufferedInputStream的用法

锺离德运
2023-03-14
问题内容

让我以谨慎的态度为这篇文章做开头。我是Java的初学者。我已经对PHP进行了一段时间的编程,但是我准备制作一个桌面应用程序,因此出于各种原因,我决定使用Java。

我正在处理的应用程序处于起步阶段(少于5个类),我需要从本地文件读取字节。通常,文件当前小于512kB(但将来可能会更大)。目前,我正在使用a
FileInputStream将文件读取为三个字节的数组,这完全可以满足我的要求。但是,我已经看到一个BufferedInputStream提及,并且想知道我当前执行此操作的方式是否最佳,或者是否也应该使用a
BufferedInputStream

我已经进行了一些研究,并在此处阅读了有关Stack
Overflow的一些问题,但是我仍然难以理解何时使用和不使用的最佳情况BufferedInputStream。在我的情况下,我将字节读入的第一个数组只有几个字节(小于20)。如果我收到的数据在这些字节中比较好,那么我将文件的其余部分读入另外两个大小不同的字节数组中。

我也听到很多人提到分析,以查看在每种情况下哪种方法更有效,但是我没有分析经验,而且我不确定从哪里开始。我也希望对此提出一些建议。

对于这么长的帖子,我感到抱歉,但是我真的很想学习和理解做这些事情的最佳方法。我总是有第二个猜测我的决定的坏习惯,所以我希望得到一些反馈。谢谢!


问题答案:

如果您持续进行小读操作,那么a
BufferedInputStream将为您带来明显更好的性能。通常,对未缓冲流的每个读取请求都会导致对操作系统的系统调用,以读取请求的字节数。每个系统调用的系统调用开销可能是数千条机器指令。缓冲流通过对内部缓冲区中的8k字节进行一次大读(例如)读取,然后从该缓冲区中分发字节来减少这种情况。这样可以大大减少系统调用的次数。

但是,如果您持续进行大量读取(例如8k或更多),则BufferedInputStream速度会变慢。通常,您不减少系统调用的数量,并且缓冲会引入额外的数据复制步骤。

在您的用例(先读取20个字节的块,然后读取许多大块)的情况下,我想说使用a
BufferedInputStream更有可能降低性能而不是提高性能。但最终,这取决于实际的读取模式



 类似资料:
  • 主要内容:1 什么是Java BufferedInputStream,2 Java BufferedInputStream的语法,3 Java BufferedInputStream的构造方法,4 Java BufferedInputStream的方法,5 Java BufferedInputStream的例子1 什么是Java BufferedInputStream Java BufferedInputStream 类用于从Stream读取信息。它在内部使用缓冲机制来提高性能。 关于Buffe

  • 首先,我理解了缓冲作为包装的概念,例如,充当从底层流读取内容的临时容器(让我们采取读取场景),在本例中-。 比方说,有100个字节要从流中读取(文件作为源)。 如果没有缓冲,代码(BufferedInputStream的读取方法)必须进行100次读取(一次一个字节)。 使用缓冲,取决于缓冲区大小,代码使 在这种情况下,虽然被一个包装,底层流(例如)仍然必须一次读取一个字节。那么,缓冲的好处在哪里(

  • 我在一个教程中看到,BufferedInputStream类本身中的int read(字节b[],int off,int len)使用read()方法读取数据。 所以我的问题是,正常模式和不使用BufferedInputStream和使用buffer有什么区别?缓冲区应该以块的形式读取字节以降低成本,但这里它是逐字节读取。

  • 本文向大家介绍Java中的BufferedInputStream与BufferedOutputStream使用示例,包括了Java中的BufferedInputStream与BufferedOutputStream使用示例的使用技巧和注意事项,需要的朋友参考一下 BufferedInputStream  BufferedInputStream 是缓冲输入流。它继承于FilterInputStrea

  • 问题内容: 之间有什么区别,并在Java?阅读文本并阅读。除此之外有什么区别吗? 问题答案: 我猜想,区别在于阅读器和输入流之间的区别:一种是基于字符的,另一种是基于字节的。例如,阅读器通常支持编码… 编辑: 检查此问题:读取多字节字符时InputStream和InputStreamReader之间的区别

  • 我正在编写一个代码,使用BufferedInputStream从用户处读取输入,但由于BufferedInputStream读取字节,我的程序只读取第一个字节并打印它。除了只读取第一个字节外,还有什么方法可以读取/存储/打印整个输入(将是整数)? 输出: [shadow@localhostcodechef]$java巨大输入测试5452 5