2016-01-26 35 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