zlib 膨胀,在 erlang 中给出数据错误



我有一个Java客户端,它正在向监听TCP的erlang服务器进程发送一些消息。Java 客户端使用输出流发送数据。在服务器端,我使用以下调用在初始化 zlib 后解压缩数据

zlib:inflate(ZStream, Data),

其中数据是二进制的。我接到data_error这个电话。在什么情况下我会使用 zlib data_error。

尝试设置 0 或 -15 WindowBits,如果您粘贴更多代码(如 zlib:inflateInit 调用、数据变量的二进制转储和 Java 端 zlib init)会有所帮助。

如果你以相对较小的块流式传输数据,你可以在Github上使用我的ezlib。

性能方面,它比 erlang 驱动程序快约 69%,并且在有并发会话时效果更好。

要集成,请使用钢筋,就像对任何其他 erlang 应用程序所做的那样。运行一个小示例:

StringBin = <<"this is a string compressed with zlib nif library">>,
{ok, DeflateRef} = ezlib:new(?Z_DEFLATE),
{ok, InflateRef} = ezlib:new(?Z_INFLATE),
CompressedBin = ezlib:process(DeflateRef, StringBin),
DecompressedBin = ezlib:process(InflateRef, CompressedBin).

不要使用它来压缩大块,因为您可以阻止 erlang 调度程序。我将在后续版本中更改此设置。

最新更新