検索
連載

意外と知らないファイル圧縮技術の常識プログラマーの常識をJavaで身につける(8)(1/4 ページ)

本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回はアーカイブと圧縮の違いなどの基礎知識とともに、Java APIでJava定番のファイル圧縮形式jarやgzip、zip形式を扱う方法も紹介。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

編集部注

Java言語の基礎を学びたい読者は、連載「【改訂版】Eclipseではじめるプログラミング」をご参照ください。


 今回はデータの圧縮技術を学んでいきます。データの圧縮技術はさまざまなコンピュータ関連用途において利用されていますが、この記事では「ファイル圧縮」の話題に絞って話を進めていきます。

意外と知らない、「圧縮」って何?

 私たちが普通にOSを利用していると、ファイルの拡張子が「.zip」「.lzh」「.cab」などとなっているファイルを扱うことがあります。これらの拡張子を持つファイルは、複数のファイルやディレクトリを1つのファイルにまとめたもので、そのファイルサイズも、中に含まれるファイルの合計サイズより小さくなっている(圧縮されている)場合があります。

アーカイブ機能とファイル圧縮機能は別のもの?

 例として、ファイルの拡張子が「.zip」のファイルを取り上げましょう。Windows XPでは、[エクスプローラ]でファイルを選択した後に右クリックし、[送る(N)]→[圧縮 (zip 形式) フォルダ]を選択すると、ファイル拡張子が「.zip」(zip形式)のファイルを作成できます。

図1 [エクスプローラ]でファイルやディレクトリを圧縮フォルダに送る
図1 [エクスプローラ]でファイルやディレクトリを圧縮フォルダに送る

 この操作を行うと、下記のような圧縮ファイル(圧縮(zip形式)フォルダ)が作成されます(ファイル名はこの例とは異なる結果になる場合があります)。

図2 作成された圧縮フォルダ
図2 作成された圧縮フォルダ

 この圧縮ファイル(圧縮(zip形式)フォルダ)をダブルクリックなどの操作で開くと、圧縮ファイルの中に含まれるファイルやディレクトリを確認できます。

図3 圧縮ファイルの中に含まれるファイルやディレクトリを確認する
図3 圧縮ファイルの中に含まれるファイルやディレクトリを確認する

 このように、複数のファイルを1つのファイルとしてまとめて扱うことができる機能を「アーカイブ機能」と呼びます(なお、一般的にはアーカイブ機能とファイル圧縮機能の両方を区別せず、単にアーカイブ、圧縮と呼ぶことも多いです)。

 逆に、アーカイブから中に含まれるファイルやディレクトリを取り出す処理を、「展開」や「解凍」などと呼びます。Windowsの[エクスプローラ]やJavaのjarコマンドでは「展開」と呼んでいます。

見てよく分かるファイル圧縮機能

 次に、「ファイル圧縮」機能を見ていきましょう。ファイル圧縮の効果が出やすいように、アルファベット「A」が50個の行が1000行からなるテキストファイルを作成します。

図4 単調で大きなファイルの例(フォルダ表示)
図4 単調で大きなファイルの例(フォルダ表示)
図5 単調で大きなファイルの例(ファイル内容をsakuraエディタで表示)
図5 単調で大きなファイルの例(ファイル内容をsakuraエディタで表示)

 いかにも単調な内容ですね。このファイルを、先ほどと同じ手順でzipファイル形式へと圧縮します。

図6 単調で大きなファイルを圧縮フォルダに送る例
図6 単調で大きなファイルを圧縮フォルダに送る例

 すると、ファイルサイズが50.7kbytesから376bytesへと、劇的に小さくなっていることが分かります。

図7 単調で大きなファイルが圧縮された後の例
図7 単調で大きなファイルが圧縮された後の例

 ファイル圧縮の効果が表れていることがよく分かりますね。

 このように、ファイル圧縮を行うと、ファイルサイズを小さくすることができる場合もあります(ファイルの内容によっては、ファイルサイズが小さくならない場合もあります)。

 次ページでは、ファイルの展開(解凍)とJava APIによるファイル圧縮を見ていきます。

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る