提案详情
我们目前正在使用一个自定义构建的zip写入器来"刷新"zip头部和EOCD页脚,这在90%的情况下看起来与writer.go
中的相同。这个自定义zip写入器的用途是在不需要实际文件数据的情况下"准备一个zip文件",从而允许zip文件的流式传输。
我们目前无法使用标准的golang zip库,因为我们无法手动将countWriter
的位置向前移动。理想情况下,我们应该能够在不受限于预先写入数据的情况下设置w.cw.count
(因此不幸的是,SetOffset()
不能被使用)。
这里的建议是添加以下辅助函数或类似的功能,以便在不受SetOffset()
限制的情况下传递w.cw.count
变量,并使用以下公共函数读取其值:
// pseudo code:
func (w *Writer) AdvanceOffset(n int64) {
w.cw.count += n
}
func (w *Writer) GetOffset() int64 {
w.cw.count
}
这将使标准golang zip库对我们的使用场景有用。我们将使用现有的Flush()
函数来获取中间头部和EOCD页脚。
2条答案
按热度按时间jyztefdp1#
这似乎是一个非常特殊的目的。我很难想象其他人会如何使用这个功能。它真的值得添加到标准库中吗?
在我看来,你可以通过调用
Write
方法并传入适当大小的切片来增加偏移量。如果需要,底层写入器可以丢弃数据。eoigrqb62#
感谢快速回复!
在我看来,你可以通过调用具有适当大小的切片的Write方法来增加偏移量。
是的,这也可以用来解决这个特定的用例。缺点是,在zip元素之间压缩的文件(由于没有更好的描述)在我们的具体情况下可能会变得相当大,在某些情况下我们很容易谈论> 500 GB。举一个极端但并不罕见的例子,为1 TiB文件做这项工作将导致以下代码片段:
这非常慢且内存密集。不必这样做:
...会使我们的生活轻松很多😅。