是否有任何主流壓縮算法,例如snappy,zlib或bzip本地支持跨網絡流數據?例如,如果我必須發送一個壓縮的有效負載,那麼在發送消息之前,我是否必須手動預先確定有效負載的大小?或者是否有任何庫提供API來告知郵件是否完整,並給出x
字節?是否有任何主流壓縮算法本地支持流數據
回答
Zstd確實。有一個ZSTD_compressStream()/ ZSTD_decompressStream()API。
請參閱https://github.com/facebook/zstd/tree/dev/examples。
下面的僞代碼:
// Create stream
ZSTD_CStream* const cstream = ZSTD_createCStream();
// Init stream
size_t const initResult = ZSTD_initCStream(cstream, cLevel);
size_t read, toRead;
while((read = fread(buffer, 1, toRead, file))) {
ZSTD_inBuffer input = { buffIn, read, 0 };
// Process next chunk
while (input.pos < input.size) {
ZSTD_outBuffer output = { buffOut, buffOutSize, 0 };
// Compress Data
toRead = ZSTD_compressStream(cstream, &output , &input);
[...]
fwrite_orDie(buffOut, output.pos, fout);
}
}
ZSTD_outBuffer output = { buffOut, buffOutSize, 0 };
// End stream
ZSTD_endStream(cstream, &output);
[...]
// Free stream
ZSTD_freeCStream(cstream);
另外也DEFLATE(zlib的兼容)無國籍SLZ流媒體(僅壓縮 - ),以每流減少的狀態存儲的衆多客戶:http://www.libslz.org/「無國籍ZIP庫 - SLZ「:
SLZ是一種快速無記憶流式壓縮器,它可以產生可以用zlib或gzip解壓縮的輸出。它根本沒有實現解壓縮,zlib對此完全沒問題。 目的是在需要兼容zlib的流並且zlib的資源使用率過高而壓縮比不是關鍵的情況下使用SLZ。典型的用例是在HTTP服務器和網關中,這些服務器和網關必須並行壓縮多個數據流,只需很少的CPU資源就可以分配給該任務,而不必因存儲器使用率而影響壓縮比。在這樣的環境下,服務器的內存使用量可以很容易地被10除以及CPU使用率除以3.此外,其高性能使其填補了網絡備份應用程序的空白。
雖然除了流描述符本身以外,zlib還爲每個流使用256 kB的內存,而SLZ僅存儲由28個字節組成的流描述符。因此它特別適合需要處理數十到數十萬個併發流的環境。
zlib和SLZ之間的主要區別在於SLZ是無狀態的,因爲它不會將先前壓縮的數據視爲其字典的一部分。它沒有傷害的壓縮性能,當它在足夠大的數據塊被送到(至少幾KB一次)
zlib(deflate)支持按原樣流式傳輸。 「無狀態」業務僅僅是爲了在_many_壓縮線程的情況下減少內存使用量,儘管以壓縮效率爲代價。 –
zlib的,bzip2的,LZ4,zstd,brotli,LZMA2,和許多其他人都支持通過流在壓縮數據中使用數據結束標記。
碰巧,您提到的其中一個活潑的,在您提出的意義上不是流式,因爲格式以未壓縮的大小開始。
- 1. 比特流壓縮算法
- 2. CUDA流壓縮算法
- 3. 是否有任何算法可以很好地壓縮哈希?
- 4. Drools/JBPM5是否支持數據流?
- 5. 是否有任何支持線壓縮的MongoDB驅動程序?
- 6. JavaScript:數據流壓縮/解壓縮
- 7. JavaFX是否支持RTSP流?
- 8. JPlayer是否支持RTSP流?
- 9. 壓縮流的能力如何影響壓縮算法?
- 10. C++用於流的壓縮算法
- 11. ETL數據流任務 - 保持計算
- 12. 是否有任何支持計算列的內存數據庫?
- 13. 如何壓縮流?
- 14. websocket是否可以支持gzip壓縮?
- 15. VisualSVN Server 3是否支持HTTP壓縮?
- 16. iOS是否支持TLS壓縮?
- 17. Directx11是否支持ASTC壓縮紋理?
- 18. 檢測本地瀏覽器是否支持ICE涓流
- 19. 主詳細流版本支持
- 20. 壓縮到流
- 21. 壓縮流
- 22. zlib,如何解壓縮壓縮數據塊的流?
- 23. HttpURLConnection是否支持開箱即用的壓縮/解壓縮?
- 24. 是否有任何Java壓縮工具
- 25. Swift是否有任何本地併發和多線程支持?
- 26. 當地dynamodb的流支持?
- 27. 閱讀GZip壓縮流中的數據
- 28. pdftk不會解壓縮數據流
- 29. voip項目中最流行的壓縮算法是什麼?
- 30. Flash player 10.3是否支持p2p串流?
幾乎根據定義,流媒體API將無法跟蹤消息邊界。這是來電者的責任。 –
@JamesKPolk那麼人們在消息之前編碼消息大小的常用方式是什麼?手動整數編碼? – Curious
如果只有一條消息,那麼您可以閱讀,直到邏輯EOF。否則,您可以前綴一個整數,或使用一些獨特的分隔符。 –