bufferedinputstream的缓冲区应该设置多大?

默认是8M,但是本身文件大小是小于8M的,不太清楚应该设置多大能起到缓冲的作用,是应该小于等于文件大小吗?因为下载文件是跑批操作,批量文件,所以也要考虑到频繁创建缓冲区的内存消耗。

阅读 5k
1 个回答

BufferedInputStream维护的是用户空间中的一个数组,其目的是为了减少应用程序陷入内核的次数,比如一个15M的文件,如果你缓冲区大小是3M,那么会陷入内核5次,如果缓冲区大小8M,那么会陷入内核2次,如果缓冲区大小16M,那么只用陷入1次,虽然减少内核陷入的次数(都会起到缓冲作用),但是增加了内存消耗,而且会有浪费的可能(比如上面的16M,实际上只读了15M,那就浪费了1M),这样一来缓冲区大小的设置就由你自己去权衡,比如说内存足够无所谓,那缓冲区当然越大越好,比如说你80%的文件平均大小在6M左右,那你可以设置6M,考虑到批量操作,缓冲区的频繁申请和回收会损失部分性能,所以可以用缓冲池的技术去避免,做到缓冲区的重复利用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题