代码之家  ›  专栏  ›  技术社区  ›  Martin G

zlib中如何使用gzbuffer分配的缓冲区?

  •  1
  • Martin G  · 技术社区  · 6 年前

    试图理解 gzbuffer 在zlib中使用。这是从手册上剪下来的( https://www.zlib.net/manual.html

    ZEXTERN int ZEXPORT gzbuffer OF((gzFile文件,无符号大小));

    设置此库函数使用的内部缓冲区大小。默认缓冲区大小为8192字节。此函数必须在gzopen()或gzdopen()之后调用,并且必须在读取或写入文件的任何其他调用之前调用。缓冲区内存分配总是延迟到第一次读或写。分配的缓冲区空间是该大小的三倍。较大的缓冲区大小(例如64K或128K字节)将显著提高解压(读取)的速度。

    新的缓冲区大小还影响gzprintf()的最大长度。

    gzbuffer()成功时返回0,失败时返回1,例如调用太晚。

    因此分配了三倍的缓冲区大小。当我打电话的时候 gzwrite GZ写入 )或者未压缩的数据是否写入缓冲区(然后,压缩被延迟,直到缓冲区被填满并且 gzflush 是内部调用,还是我调用 gzflush公司 (我自己)

    GZ写入 ,当缓冲区被填满时会发生什么?此时是否分配了一些新的缓冲区内存,或者只是将缓冲区刷新到文件中,然后重新使用?

    1 回复  |  直到 4 年前
        1
  •  0
  •   Mark Adler    6 年前

    size 分配了输入缓冲区,并且 2*size 已分配输出缓冲区。写作时,同样的东西,但反过来。

    如果 len 大小 在里面 gzwrite(state, buf, len) 大小 字节。如果 大于或等于 大小 缓冲区中剩余的内容被压缩,然后是所有提供的 伦恩 数据。如果请求刷新,则压缩输入缓冲区中的所有数据。

    压缩数据在 大小 每次写入的输出缓冲区 压缩字节已累积,或者 gzFile