我正在读取和解析(解码)一个使用zlib压缩的自定义格式文件。我的问题是如何在不增加切片大小的情况下高效地解压缩并解析未压缩的内容?我想在读入可重用缓冲区时进行解析。
由于这是一个速度敏感的应用程序,因此我希望尽可能高效地读取它。通常,我会使用ioutil.ReadAll来读取数据,然后再通过循环解析数据。这一次,我想在读取数据时进行解析,而不必将其读入需要增大的缓冲区中,以实现最大的效率。
基本上,我认为如果我能找到一个完美大小的缓冲区,那么我就可以将其读入、解析,然后再次覆盖该缓冲区,然后再次解析等等。但问题在于,zlib读取器每次调用
由于这是一个速度敏感的应用程序,因此我希望尽可能高效地读取它。通常,我会使用ioutil.ReadAll来读取数据,然后再通过循环解析数据。这一次,我想在读取数据时进行解析,而不必将其读入需要增大的缓冲区中,以实现最大的效率。
基本上,我认为如果我能找到一个完美大小的缓冲区,那么我就可以将其读入、解析,然后再次覆盖该缓冲区,然后再次解析等等。但问题在于,zlib读取器每次调用
Read(b)
时似乎都会读取任意数量的字节;它不会填充切片。因此,我不知道完美的缓冲区大小是多少。我担心它可能会将我写入的某些数据分成两块,使得解析变得困难,因为一些uint64可能被分成两个读取,因此不能在同一缓冲区读取 - 或者这种情况永远不会发生,总是以与最初写入的大小相同的块读取?
- 什么是最优缓冲区大小?或者是否有一种方法可以计算出这个值?
- 如果我使用
f.Write(b []byte)
将数据写入zlib编写器中,那么在读回压缩数据时,可能会将同样的数据分成两部分(这意味着我在解析期间必须拥有历史记录),还是它总是以相同的方式读取?