2017-03-13 9 views
2

私は、データの小さなまとまりを圧縮するiOSアプリを持っています。私はLZ4モードで実行しているcompression_encode_bufferを使って、自分のニーズに十分に速いようにします。iOSのcompression_encode_bufferからLZ4の出力をデコードする

後で、アップル以外のデバイスでファイルを作成してデコードしました。以前はZLIB圧縮モードを使用していましたが、System.IO.Compression.DeflateStreamを使用してC#で正常にデコードできました。

しかし、私はLZ4出力で時間があります。 LZ4のドキュメントhereに基づいて、Appleはストリームを複数のブロックに分割します。各ブロックは4バイトのマジックナンバー、4バイトの圧縮解除サイズ、4バイトの圧縮サイズで始まります。すべてのことが意味を成しています。ファイルを構文解析して、生のLZ4チャンクにすることができます。バッファーiOSの各チャンクは約65,635バイトに圧縮解除され、私の場合は約10個あります。

しかし:私は残っているLZ4チャンクをどうすればいいのかわかりません。私はLZ4netのLZ4.LZ4Stream、LZ4netのLZ4.LZ4Codec(最初のブロックを管理していますが、2番目のブロックでフィードすると失敗します)でデコードしようとしました。また、データをデコードするためにいくつかのC++ライブラリを試しました。それぞれは、iOS圧縮関数が非標準的な方法でエンコードしたヘッダーを探しているようです。

答えて

2

私自身に答える:(その生保存形式を処理するために必要な修正を加えた)AppleのLZ4デコンプレッサはここにある:https://opensource.apple.com/source/xnu/xnu-3789.21.4/osfmk/vm/lz4.c.auto.html

編集その後:私は実際にこの作業を取得することができませんでしたが、私はかけていません私はAppleのLZFSEデコンプレッサーを見つけたので、それに多くの時間を費やしました。

LZFSEデコンプレッサーは、ここにあります。https://github.com/lzfse/lzfse

関連する問題