我尝试使用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似乎面向文件夹和文件的结构 我怎么办?
答案 0 :(得分:2)
ZipOutputStream
旨在生成Zip file,正如您所注意到的,它通常用作文件和文件夹的容器(“压缩文件夹”或“压缩目录树”,在其他中)字)。
如果您只想压缩字符串然后将其转换为某种可打印格式,ZipOutputStream
并不是真正的选择。在我看来,GZIPOutputStream
更适合这个目的。
由于您使用 android 标记标记了此问题,请在此处注释评论:http://developer.android.com/reference/java/util/zip/GZIPOutputStream.html
使用GZIPOutputStream比ZipOutputStream容易一些,因为GZIP仅用于压缩,而不是多个文件的容器。