java : 使用缓冲输入流是否会使输入流转换为 byte[] 更有效?



我想将输入流转换为 byte[],我正在使用IOUtils.toByteArray(inputStream).使用像BufferedInputStream这样的包装器来输入流会更有效率吗?它能节省内存吗?

它是否会通过像 BufferedInputStream 这样的包装器来提高效率 输入流 ?

没有任何意义。IOUtils.toByteArray将数据读入 4096 字节的缓冲区。 默认情况下,BufferedInputStream使用 8192 字节缓冲区。 使用BufferedInputStream执行的 IO 读取次数较少,但您需要一个非常快的数据源才能注意到任何差异。

如果您一次读取一个字节(或几个字节)的输入流,那么使用 BufferedInputStream 确实可以提高性能,因为它将操作系统调用的数量减少了 8000 倍。相对而言,操作系统调用需要花费大量时间。

它能节省内存吗?

不。IOUtils.toByteArray将创建一个new byte[4096],无论传入缓冲输入流还是未缓冲输入流。创建BufferdedInputStream需要花费更多的内存。但没什么大不了的。

就最终内存消耗而言,这无济于事,因为无论如何您都需要将整个流移动到byte[],数组的大小将是相同的,因此内存消耗将是相同的。

BufferedInputStream的作用是包装另一个流,而不是直接写入它,它将输入缓冲到内部缓冲区中,并且仅在closes/flushes或内部缓冲区已满时才写入基础流。它可以使您的写入操作更快,因为您将批量执行它们,而不是每次都直接写入,但是如果您从另一端读取它,这将无济于事。

最新更新