什么时候使用BufferedInputStream?

问题描述

为什么我用BufferedInputStream包装FileInputStream并使用read(byte[20])并让 内部具有8192字节的BufferedInputStream缓冲区是否可提高性能?

相反,我可以使用fileInputStream.read(byte[8192])对吗?现在,我不再需要使用BufferedInputStream。

我什么时候使用BufferedInputStream?我有什么想念的吗?当我使用FileInputStream进行大读取可以获得更好的性能优势时,我从不希望做较小的读取。在什么情况下,较小的读取一次可以读取20个字节?

解决方法

你没有。

BufferedInputStream是一个有用的构造,,前提是同时满足以下两个条件两者

  • 基础输入流(您传递给BufferedInputStream构造函数的输入流)使得小读操作效率低下(例如,在达到某个特定大小的情况下,所有读操作都花费相同的时间,因此小读取效率低下)。对于文件,有时对于网络流,这往往是正确的。
  • 实际上,您打算阅读一些内容。

如果您设置的代码可以一次读取一个缓冲负载,那就太好了。不要理会BufferedInputStream。并非总是如此。例如,如果您要在二进制格式的读取器上编写一些简单的摘要,则倾向于进行大量的小读取。 (通常是.read(),最多只能读取一个字节)。

请注意,.read(byte[])难以使用:如果将8192大小的字节数组传递给此方法,则不必全部读取8192字节,即使要读取8192字节也是如此。 read:该方法将读取最佳字节数,保证至少读取1个字节(或读取0个字节,返回值-1,表示流结束,或者当然是例外),但不保证最大读取次数,除了基本的“ blit”操作(您只需读取全部内容并将其直接复制到其他内容中)之外,几乎会使每个读取作业变得复杂。

如果您要进行复制,请注意in.transferTo(out)存在-一根衬纸,您甚至不必创建缓冲区,并且将尽可能地提高效率。

如果您需要保证可以读取的字节数最多,还可以使用.readNBytes.readFully

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...