3

我正在尝试压缩一堆文件并通过流使数据可用。

我想保持内存占用尽可能小。

我的想法是实现一个 Stream,其中我有一堆 FileStream 对象作为数据成员。当我的 Stream 上的 Read 方法被调用时,我会从我的一个文件流中读取一些数据,并使用 ZipOutputStream 实例将压缩数据写入临时存储流,然后我会将读取请求转发到该临时存储流。

这个临时存储流只是一个字节队列。随着这些字节被移动到缓冲区中(通过调用读取),它们将从队列中删除。这样,我只会存储尚未读取的字节。

不幸的是,似乎当我处理 ZipOutputStream 时,它需要写入随机文件位置才能创建有效的 zip 文件。这将阻止我使用我的“转瞬即逝的数据”解决方案。

希望这一切都清楚:)

在创建 zip 文件时,还有其他方法可以最大限度地减少内存占用吗?请帮忙!

谢谢!

4

1 回答 1

1

ZipOutputStream不需要写入输出流中的随机位置(换句话说,调用Seek())。但是,如果您正在写入的流报告它CanSeek,它将使用该功能更新一些标题。

因此,请确保您正在写入的流返回false并且CanSeek()一切正常。

于 2012-02-07T20:31:15.137 回答