java解压文件 文件过大,Java压缩/解压缩大文件(> 1gb)

如果将缓冲区大小调整为文件大小,则表示只要文件大小太大而无法使用可用内存,就会出现OutOfMemoryError。

使用正常的缓冲区大小让它做它的工作 - 以流式方式缓冲数据,一次缓冲一个块,而不是一次性缓冲。

有关说明,请参阅BufferedOutputStream的文档:

The class implements a buffered output stream. By setting up such an

output stream, an application can write bytes to the underlying output

stream without necessarily causing a call to the underlying system for

each byte written.

因此,使用缓冲区比非缓冲写入更有效。

并从write方法:

Ordinarily this method stores bytes from the given array into this

stream's buffer, flushing the buffer to the underlying output stream

as needed. If the requested length is at least as large as this

stream's buffer, however, then this method will flush the buffer and

write the bytes directly to the underlying output stream.

每次写入都会导致内存缓冲区填满,直到缓冲区已满。缓冲区已满时,将刷新并清除。如果使用非常大的缓冲区,则会在刷新之前将大量数据存储在内存中。如果您的缓冲区与输入文件的大小相同,那么您说在刷新之前需要将整个内容读入内存。使用默认缓冲区大小通常很好。将有更多的物理写入(刷新);你避免爆炸记忆。

通过允许您指定特定的缓冲区大小,API允许您在内存消耗和I / O之间选择适当的平衡以适合您的应用程序。如果您调整应用程序的性能,最终可能会调整缓冲区大小。但是在许多情况下,默认大小是合理的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序测试可用,直接解压导入到工程就可以,bat文件跟shell文件是用于在window跟linux上直接执行的脚本 我把开发的配置文档附上: 1.程序为定时任务,任务执行时间在bin目录下的配置文件mergeFilleUtil.properties中配置,在配置文件中,TASK_PERIOD表示任务执行时间间隔,单位为妙,如一天的时间间隔配置是86400,TASK_BEGIN_HOUR表示任务开始的小时时间,比如9点,TASK_BEGIN_MINUTE表任务开始的分钟,比如30分。 2. 程序用log4j记录日志,日志分正常信息跟错误信息两个级别,日志文件存放在log4j文件夹下。考虑到文件很多,日志解压、移动文件解压、移动1000个记录一次,合并、删除文件每合并、删除50000个记录一次, 3. 启动任务前需配置文件解压合并的路径,本程序需配置的路径如下: 1). PROVINCE_DIR:原始文件存放的路径,必须配置到省的上一级路径,比如存放安徽省的文件路径为E:\test\rootfile\anhui,那么文件的路径必须配置为E:\test\rootfile,否则不能正确显示合并结果; 2). UN_ZIP_PATH:存放解压后的文件的路径; 3). OUT_PATH:存放合并后的文件路径; 4). DONE_FILE_PATH:存放已经解压处理过的文件; 5). DELETE_PATH:配置程序运行结束后欲删除文件的路径,如想删除多个文件夹下的文件,路径之间用逗号隔开,勿加空格,比如:E:\test\rootfile,E:\test\unZip; 4. 注意事项: 本解压合并程序处理文件的逻辑如下: 程序每次解压都去PROVINCE_DIR文件下去解压,将解压后的文件存放到UN_ZIP_PATH下,之后程序启动合并程序合并UN_ZIP_PATH下文件,将合并后的文件按照省份名称存放到OUT_PATH,一个省一个文件。当解压合并结束后,程序将PROVINCE_DIR路径下的文件移动到DONE_FILE_PATH下,并且删除PROVINCE_DIR跟UN_ZIP_PATH下文件,这样保证程序每次运行PROVINCE_DIR文件夹下的文件跟UN_ZIP_PATH下的文件都是最新未处理过的,避免了不断判断文件历史记录所带来的大量时间消耗。 所以为了保证文件解压跟合并的正确性,必须配置好DELETE_PATH路径下的文件,否则合并后的结果是不准确的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值