2012-07-25 22 views
5

デバイスから送信するデータ(テキスト形式)がたくさんあります。それは明らかに私がそれを圧縮する必要があることを意味します。しかし、私の質問は、ジップアルゴリズム(like this)以外の方法があるかどうかです。私がこの質問をしている理由は、here以上です - テキストファイルの場合、7-zipはzipより2倍(!)優れています。これは大きな利益です。そしてもっと良いアルゴリズムがあるかもしれません。Androidでのデータ圧縮(java.util.zip以外)

だから、Androidのために利用可能なデータ圧縮(ZIPよりも良い)のいずれかの効果的な方法がありますか?

+1

2倍は...よく、それは確かに1つの問題です。特定の種類のデータ圧縮では、さまざまな圧縮アルゴリズムが他の圧縮アルゴリズムより優れていますが、これだけではありません。標準化、特許妨害とスピードは非常に重要です。 –

+0

クイック検索は、あなたの簡単な選択肢がZipとGzipであることを示しているようです。 –

+0

zipとgzipは同じ圧縮アルゴリズムを使用していますが、zipとは異なるヘッダーとトレーラーだけです。したがって、gzip形式を使用してヘッダーと予告編に数バイトを保存し、zlib形式を使用すると数バイトを節約することができます。しかし、より多くの時間とより多くのメモリを必要とするより高度な圧縮アルゴリズムを使用すると、実質的なものはありません。 –

答えて

6

私はzlib以外の圧縮アルゴリズムは、Android上の標準ライブラリの一部として利用可能であることを疑うので、あなたは、あなたのコードに別のライブラリをコンパイルする必要があります。

あなたはLZMA SDKで、ライブラリの形で取得することができますが、実際にはLZMAと呼ばれて参照してください7-ZIPアルゴリズム。ソースコードはJavaだけでなくCでも利用できます。Cコードをアプリケーションにリンクすることができれば、それは速度向上のためには望ましいことです。

フリーランチのようなものはありませんので、スピードが重要です。 LZMAは、改善された圧縮を達成するためにはるかに多くのメモリと実行時間を必要とします。データのLZMAとzlibを試して、実行時間と圧縮の間のトレードオフを、パッケージを選択したり、パッケージ内の圧縮レベルを選択したりする場所を確認してください。

zlibより圧縮率が低く、さらに高速になるようにしたい場合は、lz4をご覧ください。

-1

あなたの質問はあまりにも一般的です。

あなたは、それがJavaまたは(NDK経由)C/C++であるとして、任意のライブラリを使用することができます。外部ライブラリを使用したくない場合は、SDKの内容に固執する必要があります。どのようにデータを送信するかによって、これを行う標準的な方法があるかもしれません。たとえば、HTTPはgzipを使用し、必要なヘッダーがすでに定義されています。要するに

、最適なものを見つけ、あなたのアプリケーションでそれを統合し、あなたの予想データフォーマットやサイズの異なるものをテストします。

+0

カスタムプロトコルでデータが送信されているため、HTTPを使用しません。あなたは良いJava圧縮ライブラリのヒントを教えてください。私は本当に何も使用していない。 – alex

+0

私のどちらか:) JDKのもので十分でした。ランダムなものを選ぶのではなく、いくつかを見つけて自分のデータと比較してテストします。 –