在Java中将字符串压缩为gzip

public static String compressString(String str) throws IOException{ if (str == null || str.length() == 0) { return str; } ByteArrayOutputStream out = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(out); gzip.write(str.getBytes()); gzip.close(); Gdx.files.local("gziptest.gzip").writeString(out.toString(), false); return out.toString(); } 

当我将该字符串保存到文件,并在unix中运行gunzip -d file.txt时,它会抱怨:

 gzip: gzip.gz: not in gzip format 

尝试使用BufferedWriter

 public static String compressString(String str) throws IOException{ if (str == null || str.length() == 0) { return str; } BufferedWriter writer = null; try{ File file = new File("your.gzip") GZIPOutputStream zip = new GZIPOutputStream(new FileOutputStream(file)); writer = new BufferedWriter(new OutputStreamWriter(zip, "UTF-8")); writer.append(str); } finally{ if(writer != null){ writer.close(); } } } 

关于你的代码示例尝试:

 public static String compressString(String str) throws IOException{ if (str == null || str.length() == 0) { return str; } ByteArrayOutputStream out = new ByteArrayOutputStream(str.length()); GZIPOutputStream gzip = new GZIPOutputStream(out); gzip.write(str.getBytes()); gzip.close(); byte[] compressedBytes = out.toByteArray(); Gdx.files.local("gziptest.gzip").writeBytes(compressedBytes, false); out.close(); return out.toString(); // I would return compressedBytes instead String } 

试试看:

 //... String string = "string"; FileOutputStream fos = new FileOutputStream("filename.zip"); GZIPOutputStream gzos = new GZIPOutputStream(fos); gzos.write(string.getBytes()); gzos.finish(); //... 

使用FileOutputStream从out中保存字节

 FileOutputStream fos = new FileOutputStream("gziptest.gz"); fos.write(out.toByteArray()); fos.close(); 

out.toString()看起来很可疑,结果将是不可读的,如果你不在乎为什么不返回byte [],如果你关心它会看起来更好的hex或base64字符串。

Interesting Posts