ないブログに表示されています。新しい記事を書く事で広告が消えます。07:37コメントを編集する初めまして。圧縮の仕方、勉強になります。ただいまコメントを受けつけておりません。圧縮・解凍パッケージを利用する(zip,gzip)ユーザがアプリの保存データを扱う場面を思い浮かべると、できるだけ容量が小さく、できれば1つのファイルにまとまっている方が持ち運びなどに便利だろう。考えると、保存データを圧縮するという方法が有力な選択肢の1つとして考えられる。いうわけで、今回はJavaの標準ライブラリ(java.util.zip)を利用した圧縮・解凍方法を確認する。Javaの標準ライブラリではzip圧縮とgzip圧縮が利用可能となっている。それ以外の圧縮形式(7z、tar.gz(gzip+tar)など)に関しては外部ライブラリを使うと利用できるようになるが、こちらは別の記事で確認する。Java標準ライブラリで利用可能な圧縮方式Javaにおいて圧縮・解凍を扱うクラスはjava.util.zipパッケージにまとめられている(*1)。java.util.zipパッケージで利用可能な圧縮方式は以下のとおりである。インターネットで広く使われている圧縮アルゴリズム。zipやgzip内で利用されている。単一ファイルの圧縮・解凍を行う圧縮形式。複数ファイルを扱う際は、tar圧縮がよく併用される(「*.tar.gz」ファイル)。Windowsで一般的な圧縮形式。複数ファイルの圧縮・解凍が可能また、java.util.zipパッケージには上記のほかにチェックサムを扱うAdler32クラスやCRC32クラスが存在し、チェックサムを利用して入出力するためのクラス(CheckedInputStream、ChedkedOutputStream)が存在する。サンプル・プログラム1(zip圧縮・解凍)以下にJava標準ライブラリでzip圧縮・解凍するサンプルプログラムを示す。サンプルではフォルダを含む3つのファイルをzip圧縮・解凍している。sub2◇解説zip圧縮はcompressZip関数(45行目)、zip解凍はdecompressZip関数(48行目)で実施している。compressZip関数の内部(59行目~105行目)では、ZipOutputStreamクラス(72行目)に対してエントリ(Zipファイル内のファイルのようなもの)を1つ1つ登録している(75行目~104行目)。エントリーの登録では、ヘッダ情報をZipEntryクラスとして登録(78行目~79行目)してから、ファイルの内容を登録している(89行目~99行目)。解凍は圧縮の逆で、zipファイル内のエントリーを取得(122行目)してから、ファイルを1つ1つ作成している(122行目~150行目)。サンプル・プログラム2(ソケット通信の圧縮)以下にソケット通信を圧縮するサンプルプログラムを示す。サンプルでは圧縮した文字列を送るサーバ(TestCompress2Server)と受信・表示するクライアント(TestCompress2Client)の2つのプログラムが、localhost上のポートを経由して文字列を送受信する。1234567890end!◇解説まず、出力結果の見方についての注意点を説明する。Eclipse上で2つのプログラムを起動すると以下の画面のように標準出力を表示するコンソールが片方のプログラム分しか見えなくなる。表示するコンソールを変更するには「選択されたコンソールの表示」ボタンを押下して、見たいコンソールを選択する必要がある。次にプログラムを見ていく。41行目~52行目)。実際に利用するには適切な例外処理が必要となる(out.closeあたり)。ソケット通信のデータを圧縮する際の注意点としては、内部にエントリ情報(複数のファイル)を持っていないGZIPやDEFLATE形式で圧縮・解凍を利用する必要がある点があげられる(*2)。07:37コメントを編集する初めまして。圧縮の仕方、勉強になります。連絡はContactよりお願いします。忍者ブログ©軽Lab。