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

时间:2018-04-26 09:12:43

标签: java bufferedinputstream

我想将输入流转换为byte [],我正在使用IOUtils.toByteArray(inputStream)。通过为inputStream使用类似BufferedInputStream的包装器,它会提高效率吗?它能节省内存吗?

2 个答案:

答案 0 :(得分:1)

  

它会通过BufferedInputStream等包装器提高效率   inputStream?

没有任何意义。 BufferedInputStream将数据读入4096字节的缓冲区。 BufferedInputStream默认使用8192字节的缓冲区。 使用IOUtils.toByteArray可以减少IO读取次数,但是您需要一个非常快速的数据源才能发现任何差异。

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

  

是否可以节省内存?

没有。无论是传入缓冲的还是无缓冲的InputStream,new byte[4096]都会创建BufferdedInputStream#!/bin/sh # # Replace <ACCOUNT> with your account name before submitting. # #SBATCH --account=aaa # The account name for the job. #SBATCH --job-name=job_name # The job name. #SBATCH -N 4 # The number of nodes to use # (note there are 24 cores per node) #SBATCH --tasks-per-node=20 #SBATCH --time=23:58:00 # The time the job will take to run. source activate env_python mpirun -n 80 python script.py # End of script 需要花费更多内存才能创建。但没什么大不了的。

答案 1 :(得分:0)

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

BufferedInputStream做了什么,它包装了另一个流,而是直接写入它,它将输入缓冲到内部缓冲区,并仅在closes/flushes或内部缓冲区已满时写入底层流。它可以使您的写入操作更快,因为您将分批执行它们而不是每次直接写入,但如果您从另一侧读取它将无济于事。