2

DeflaterOutputStreamを使用して文字列を圧縮し、base64を使用して出力を変換して、結果を別の文字列に保存しようとしました

public static String compress(String str) throws IOException {
    byte[] data = str.getBytes("UTF-8");
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    java.util.zip.Deflater compresser = new java.util.zip.Deflater(java.util.zip.Deflater.BEST_COMPRESSION, true);
    DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(stream, cozmpresser);
    deflaterOutputStream.write(data);
    deflaterOutputStream.close();
    byte[] output = stream.toByteArray();
    return Base64Coder.encodeLines(output);
}

今、私はZipOutputStreamを試してみたいと思います。私は試した

public static String compress(String str) throws IOException {
    byte[] data = str.getBytes("UTF-8");
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    ZipOutputStream deflaterOutputStream = new ZipOutputStream(stream);
    deflaterOutputStream.setMethod(ZipOutputStream.DEFLATED);
    deflaterOutputStream.setLevel(8);
    deflaterOutputStream.write(data);
    deflaterOutputStream.close();
    byte[] output = stream.toByteArray();
    return Base64Coder.encodeLines(output);
}

しかし、動作しないでください。ZipOutputStreamは、フォルダーとファイルの構造を対象としているようです。どうすればよいですか?

4

1 に答える 1

2

ZipOutputStreamZipファイルを作成することを目的としています。これは、お気づきのとおり、ファイルやフォルダー(つまり、「圧縮フォルダー」または「圧縮ディレクトリツリー」)のコンテナーとして一般的に使用されます。

文字列を圧縮してから印刷可能な形式に変換したいだけの場合ZipOutputStreamは、実際には正しい選択ではありません。GZIPOutputStream私の意見では、その目的により適しています。

この質問にAndroidタグを付けたので、ここにコメントを書き留めてください:http: //developer.android.com/reference/java/util/zip/GZIPOutputStream.html

GZIPは圧縮専用であり、複数のファイルのコンテナではないため、GZIPOutputStreamの使用はZipOutputStreamよりも少し簡単です。

于 2013-03-26T15:27:52.190 に答える