我正在读取并同时解析(解码)自定义格式的文件,该文件用 zlib 压缩。我的问题是如何在不增加切片的情况下有效地解压缩然后解析未压缩的内容?我想在将其读入可重用缓冲区的同时对其进行解析。
这是一个对速度敏感的应用程序,所以我想尽可能有效地阅读它。通常我会只是ioutil.ReadAll
然后再次循环遍历数据来解析它。这次我想在读取它时对其进行解析,而不必增加读取它的缓冲区,以实现最高效率。
基本上我在想,如果我能找到一个完美大小的缓冲区,那么我可以读入它,解析它,然后再次写入缓冲区,然后解析它等等。这里的问题是 zlib 阅读器似乎每次Read(b)
调用时读取任意数量的字节;它不会填充切片。因此,我不知道完美的缓冲区大小是多少。我担心它可能会将我写入的一些数据分解成两个块,使其难以解析,因为有人说 uint64 可以分成两个读取,因此不会出现在同一个缓冲区读取中 - 或者可能可以永远不会发生,它总是以与最初写入的大小相同的块读出?
最佳缓冲区大小是多少,或者有没有办法计算?
如果我已将数据写入 zlib 写入器,f.Write(b []byte)
在读回压缩数据时,是否有可能将相同的数据拆分为两次读取(这意味着我在解析过程中必须有历史记录),或者它是否总是在一样读?
慕标琳琳
相关分类