我想将输入流转换为byte [],我正在使用IOUtils.toByteArray(inputStream)
。通过为inputStream使用类似BufferedInputStream
的包装器,它会提高效率吗?它能节省内存吗?
答案 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
或内部缓冲区已满时写入底层流。它可以使您的写入操作更快,因为您将分批执行它们而不是每次直接写入,但如果您从另一侧读取它将无济于事。