Javaには、Compression Libraryを使用して通常の圧縮を行うためのDeflaterクラスが用意されています。DeflaterOutputStreamまた、Deflater クラスを使用してデータ・ストリームを圧縮してフィルタリングし、圧縮されたデータを別の出力ストリームに書き出すこともできます。InflaterOutputStream解凍を処理するために、同等のInflaterとクラスがあります。
圧縮
DeflatorOutputStreamこれは、.NET Frameworkを使ってバイト配列を圧縮する方法の例です。
/**
* 圧縮された文字列、デフォルトはcomb utf-8
*
* @param text
* @return
*/
public static String zipBase64(String text) {
try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
try (DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(out)) {
deflaterOutputStream.write(text.getBytes(Constant.UTF_8));
}
return new String(DecodeEncode.base64Encode(out.toByteArray()));
} catch (IOException e) {
logger.error("テキストの圧縮に失敗した:{}", text, e);
}
return EMPTY;
}
テストしてみましょう:
public static void main(String[] args) throws IOException {
String text = DecodeEncode.zipBase64("5615616119688refdaf888888888888888865555555555555511111111111111111111111119999999999999999999999999999999911111111111111111111333333333333333333");
output(text);
String s = DecodeEncode.unzipBase64(text);
output(s);
output(text.length() + TAB + s.length());
}
コンソール出力:
INFO-> eJwzNTM0NTM0MzS0NLOwKEpNS0lMs0ADZqYowBAXsCQAsOkxxgAALV0fBw==
INFO-> 5615616119688refdaf888888888888888865555555555555511111111111111111111111119999999999999999999999999999999911111111111111111111333333333333333333
INFO-> 60 145
解凍
/**
* 非圧縮文字列、デフォルトutf-8
*
* @param text
* @return
*/
public static String unzipBase64(String text) {
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
try (OutputStream outputStream = new InflaterOutputStream(os)) {
outputStream.write(DecodeEncode.base64Byte(text));
}
return new String(os.toByteArray(), Constant.UTF_8);
} catch (IOException e) {
logger.error("テキストの解凍に失敗した:{}", text, e);
}
return EMPTY;
}
テストしてみましょう:
public static void main(String[] args) throws IOException {
String text = "eJwzNTM0NTM0MzS0NLOwKEpNS0lMs0ADZqYowBAXsCQAsOkxxgAALV0fBw==";
String s = DecodeEncode.unzipBase64(text);
output(s);
output(text.length() + TAB + s.length());
}
コンソール出力:
INFO-> 現在のユーザー:fv、IP:2.21,作業ディレクトリ:/Users/fv/Documents/workspace/fun/,システム・コーディング・フォーマット:UTF-8,システム Mac OS X バージョン:
INFO-> 5615616119688refdaf888888888888888865555555555555511111111111111111111111119999999999999999999999999999999911111111111111111111333333333333333333
INFO-> 60 145
テストケース
ここではspockテストフレームワークを使って、圧縮された文字列の長さと圧縮前の長さを検証しています。
テスト結果
そのうちの2つは合格しませんでしたが、私はデジタルエフェクトのストレージのためにこの圧縮が良くなることを感じたり、バイト[]に対処するために使用する方が良いでしょう。オンラインでは、主にファイルを圧縮するために使用されるいくつかの情報を参照するには、いくつかの良いように見えますが、私はテリアを考えてみましょう:圧縮ファイルのサイズは、圧縮前よりも大きくなります。




