我想将输入流转换为 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
或内部缓冲区已满时才写入基础流。它可以使您的写入操作更快,因为您将批量执行它们,而不是每次都直接写入,但是如果您从另一端读取它,这将无济于事。