io.Reader关于 zip 和/ 的问题io.Writer。据我了解,io/Reader/的目的之一io.Writer是流式传输。但是,如果我的类型“作为块”没有真正意义,我应该实现其中之一吗?更多细节:可以说我有这个结构。type MyZip struct {
file1, file2 []byte
}MyZip代表一个特定的结构化拉链。举例来说,它代表一个 zip 文件,其中包含一个名为 的文件file1和一个名为 的文件file2。MyZip负责解析 zip 文件以将这两个文件提取到两个[]byte字段中。它还应该以相反的方式处理(将这两个[]byte字段转换为两个命名test1并test2存档到 zip 文件中的文件)。据我了解,该包archive/zip不允许将 zip 文件解压缩为流。我们必须将 zip 完全加载到内存中或作为文件加载,然后再解压缩。MyZip因此,为了完善我的问题,实现io.Reader/io.Writer来读取/写入最终的 zip 文件是否有意义?如上所述,由于我无法即时提取这两个文件,因此我必须向该缓冲区添加某种缓冲区,MyZip然后从该缓冲区读取/写入该缓冲区。因此 zip 无论如何都会在流式传输之前完全存储在内存中。io.Reader这是不使用/ 的计数器指示吗io.Writer?非常感谢您的启发!
1 回答
繁星coding
TA贡献1797条经验 获得超4个赞
据我了解,该包
archive/zip
不允许将 zip 文件解压缩为流。我们必须将 zip 完全加载到内存中或作为文件加载,然后再解压缩。
错误的。是的,一些元数据需要加载到内存中,但您不需要将所有内容加载到内存中。您可以从 zip 存档中提取单个文件。
是的,zip.Reader
andzip.Writer
不实现io.Reader
and io.Writer
,因为它们不是字节的单个源或目标。但其中的文件确实如此。所以其中的文件实现了io.Reader
和io.Writer
. 更具体地说,存档中的文件由 表示zip.File
,可以使用 来获取io.Reader
来获取其(未压缩的)内容File.Open()
。当您使用eg向zip存档添加新条目时Writer.Create()
,它会返回一个,io.Writer
因为它代表字节目标,您可以将文件的内容写入其中。
回到你的 exmaple:MyZip
也不代表字节的单个源或目的地,因此它本身实现io.Reader
or没有意义io.Writer
,所以不要这样做。与 类似archive/zip
,其中的各个文件也可以这样做。
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消