为了账号安全,请及时绑定邮箱和手机立即绑定

如果我的类型作为流没有意义,我应该实现 io.Reader/io.Writer 吗?

如果我的类型作为流没有意义,我应该实现 io.Reader/io.Writer 吗?

Go
繁华开满天机 2023-07-26 13:30:37
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.Readerandzip.Writer不实现io.Readerand io.Writer,因为它们不是字节的单个源或目标。但其中的文件确实如此。所以其中的文件实现了io.Readerio.Writer. 更具体地说,存档中的文件由 表示zip.File,可以使用 来获取io.Reader来获取其(未压缩的)内容File.Open()。当您使用eg向zip存档添加新条目时Writer.Create(),它会返回一个,io.Writer因为它代表字节目标,您可以将文件的内容写入其中。

回到你的 exmaple:MyZip也不代表字节的单个源或目的地,因此它本身实现io.Readeror没有意义io.Writer,所以不要这样做。与 类似archive/zip,其中的各个文件也可以这样做。


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信