2013-03-26 179 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