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

io.Reader关于 zip 和/ 的问题io.Writer。据我了解,io/Reader/的目的之一io.Writer是流式传输。但是,如果我的类型“作为块”没有真正意义,我应该实现其中之一吗?

更多细节:

可以说我有这个结构。

type MyZip struct {
    file1, file2 []byte
    }

MyZip代表一个特定的结构化拉链。举例来说,它代表一个 zip 文件,其中包含一个名为 的文件file1和一个名为 的文件file2MyZip负责解析 zip 文件以将这两个文件提取到两个[]byte字段中。它还应该以相反的方式处理(将这两个[]byte字段转换为两个命名test1test2存档到 zip 文件中的文件)。

据我了解,该包archive/zip不允许将 zip 文件解压缩为流。我们必须将 zip 完全加载到内存中或作为文件加载,然后再解压缩。

MyZip因此,为了完善我的问题,实现io.Reader/io.Writer来读取/写入最终的 zip 文件是否有意义?

如上所述,由于我无法即时提取这两个文件,因此我必须向该缓冲区添加某种缓冲区,MyZip然后从该缓冲区读取/写入该缓冲区。因此 zip 无论如何都会在流式传输之前完全存储在内存中。io.Reader这是不使用/ 的计数器指示吗io.Writer

非常感谢您的启发!


繁华开满天机
浏览 96回答 1
1回答

繁星coding

据我了解,该包archive/zip不允许将 zip 文件解压缩为流。我们必须将 zip 完全加载到内存中或作为文件加载,然后再解压缩。错误的。是的,一些元数据需要加载到内存中,但您不需要将所有内容加载到内存中。您可以从 zip 存档中提取单个文件。是的,zip.Readerandzip.Writer不实现io.Readerand io.Writer,因为它们不是字节的单个源或目标。但其中的文件确实如此。所以其中的文件实现了io.Reader和io.Writer. 更具体地说,存档中的文件由 表示zip.File,可以使用 来获取io.Reader来获取其(未压缩的)内容File.Open()。当您使用eg向zip存档添加新条目时Writer.Create(),它会返回一个,io.Writer因为它代表字节目标,您可以将文件的内容写入其中。回到你的 exmaple:MyZip也不代表字节的单个源或目的地,因此它本身实现io.Readeror没有意义io.Writer,所以不要这样做。与 类似archive/zip,其中的各个文件也可以这样做。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go