私は Java で独自の画像圧縮プログラムを作成しています。エントロピーでエンコードされたデータを複数の配列に格納しており、ファイルに書き込む必要があります。ファイルに書き込むさまざまな方法を知っていますが、可能な限り少ない量のストレージを使用しようとするときに何を考慮する必要があるかを知りたい. たとえば、どの文字セットを使用すればよいか (正の数と負の数を書き込む必要があるだけです)、ファイルに 1 バイト未満を書き込むことができるか、Scanners/BufferedWriters などを使用する必要があります。事前に感謝します。必要に応じてさらに情報を提供します。
3 に答える
IOに関するJavaチュートリアルを読んでください。
あなたがすべき
- バイナリデータを書き込みたいので、ライターと文字セットを使用しないでください
- バッファリングされたストリームを使用して、ネイティブコールが多すぎないようにし、書き込みを高速化します
- スキャナーはデータの読み取りに使用され、データの書き込みには使用されないため、使用しないでください
いいえ、ファイルに1バイト未満を書き込むことはできません。バイトは、ファイルに保存できる情報の最小量です。
どの文字セットを使用すればよいですか
データを文字ではなくバイトとして書き込む必要があるため、文字セットは忘れてください。
ファイルに 1 バイト未満を書き込むことはできますか?
いいえ、これは不可能です。しかし、デコーダーの予想されるビット ストリームに従うには、そのバイトをファイルに書き込む前に、5 ビットや 3 ビットなどから 1 バイトを作成する必要がある場合があります。
圧縮はほとんどの場合、ファイル IO よりもコストがかかります。ボトルネックであることがわかっていない限り、書き込み速度について心配する必要はありません。
私は Java で独自の画像圧縮プログラムを作成しています。エントロピーでエンコードされたデータを複数の配列に格納しており、ファイルに書き込む必要があります。ファイルに書き込むさまざまな方法を知っていますが、可能な限り少ない量のストレージを使用しようとするときに何を考慮する必要があるかを知りたい.
データをバイナリ形式で書き込むと、最小になります。これが、ほとんどすべての画像形式がバイナリを使用する理由です。
たとえば、どの文字セットを使用すればよいか (正の数と負の数を書くだけです)、
文字エンコーディングは、文字、つまりテキストをエンコードするためのものです。通常、これらをバイナリ形式で使用することはありません (最初に使用する可能性が低いテキストが含まれている場合を除きます)。
ファイルに 1 バイト未満を書き込むことはできますか?
技術的には、512 バイトまたは 4 KB など、ディスク上のブロック サイズよりも小さいサイズを使用できます。これよりも少ない量を書き込むことはできますが、使用するスペースが少なくなることはありません。
Scanners/BufferedWriters などを使用する必要があります。
いいえ、これらはテキスト用です。
代わりに、バイナリ用の DataOutputStream と DataInputStream を使用してください。