2013-03-26 89 views
1

我試圖壓縮與DeflaterOutputStream串並轉換使用Base64的輸出結果保存在另一個字符串如何壓縮一個字符串ZipOutputStream,並保存爲可讀的字符串

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似乎定位於文件夾和文件的結構 我該怎麼辦?

+0

可能的重複http://stackoverflow.com/questions/3649485/how-to-compress-a-string – 2013-03-26 15:23:59

回答

1

ZipOutputStream旨在生成一個Zip file,正如您注意到的,它通常用作文件和文件夾(換言之,「壓縮文件夾」或「壓縮目錄樹」)的容器。

如果你只是想壓縮一個字符串,然後將其轉換爲某種可打印的形式,ZipOutputStream並不是真正的選擇。在我看來,GZIPOutputStream更適合這個目的。

既然你標有安卓標籤這個問題,注意這裏的評論:http://developer.android.com/reference/java/util/zip/GZIPOutputStream.html

使用GZIPOutputStream比ZipOutputStream更容易一些,因爲GZIP只能壓縮,而不是多個文件的容器。

+0

GZIPOutputStream似乎goob,但沒有快速的選擇。我試圖改變壓縮使用 ** OutputStream gzipout = new GZIPOutputStream(stream){{def.setLevel(java.util.zip.Deflater.BEST_COMPRESSION);}}; ** 但我希望也刪除標頭。每個Base64字符串都以H4sIAAAAAAAAA開頭。有一個設置可以避免標題被寫入? – user1719863 2013-03-27 15:40:34