2016-01-26 33 views
2

我有一个Java客户端发送一些消息到erlang服务器进程侦听TCP.The Java客户端使用outputstream发送数据。在服务器端我使用以下调用来解压缩初始化zlib后的数据zlib充气在Erlang给数据错误

zlib:inflate(ZStream, Data), 

其中数据是binary.I在这个调用中得到data_error。 在什么情况下,我会通过zlib获取data_error。

回答

0

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

-1

如果您要以相对较小的数据块流式传输数据,则可以使用我的ezlib on Github

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

要进行集成,请使用rebar,就像您为其他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调度器。我会在后续版本中更改它。

+0

只需链接到你自己的东西[不是一个好的答案](// stackoverflow.com/help/promotion)。一个涉及非现场资源的良好答案包括未来用户的答案的基本部分,并引用以下内容:_你在谈论什么?我在哪里安装它?我如何安装它?我如何使用这个东西来解决我在我的问题中遇到的确切问题**?你是否以任何方式,形状或形式附属于这件事?_请参阅:[如何以社区友好的方式链接到外部资源?](// meta.stackexchange.com/questions/94022) – Mogsdad

+0

@ Mogsdad随时删除我的帖子。如果人们使用或不使用我的图书馆,我没有任何好处。我创建了该库,因为erlang zlib驱动程序非常糟糕。你可以谷歌它,你会发现很多抱怨的事实,并行进程无法正常工作。对于这个事实,其他公司也可能创建了自己的库(例如p1到他们的ejabberd项目中):https://github.com/processone/zlib – silviu

+0

嗨Silviu - 感谢您的回复。我只是另一个用户 - 我无法删除你的帖子,这不是我评论的内容。我说你可以用更多的信息让你的答案更好。 – Mogsdad