问题描述
我试图使用下面的Java代码来压缩和解压缩一个字符串。但是,在新的ByteArrayInputStream对象中创建一个新的GZipInputStream对象的行抛出java.util.zip.ZipException:Not in GZIP format异常。有人知道如何解决这个问题吗?
I am trying to use the following Java code to compress and uncompress a String. But the line that creates a new GZipInputStream object out of a new ByteArrayInputStream object throws a "java.util.zip.ZipException: Not in GZIP format" exception. Does anyone know how to solve this?
String orig = ".............";
// compress it
ByteArrayOutputStream baostream = new ByteArrayOutputStream();
OutputStream outStream = new GZIPOutputStream(baostream);
outStream.write(orig.getBytes());
outStream.close();
String compressedStr = baostream.toString();
// uncompress it
InputStream inStream = new GZIPInputStream(new ByteArrayInputStream(compressedStr.getBytes()));
ByteArrayOutputStream baoStream2 = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
int len;
while((len = inStream.read(buffer))>0)
baoStream2.write(buffer, 0, len);
String uncompressedStr = baoStream2.toString();
推荐答案
Mixing String and byte [];从来不适合。并且只能在相同的操作系统上使用相同的编码。不是每个字节[]都可以转换为字符串,转换回可以给其他字节。
Mixing String and byte[]; that does never fit. And only works on the the same OS with same encoding. Not every byte[] can be converted to a string, and the conversion back could give other bytes.
compressedBytes不需要表示字符串。
The compressedBytes need not represent a String.
在getBytes和new String中显式设置编码。
Explicitly set the encoding in getBytes and new String.
String orig = ".............";
// compress it
ByteArrayOutputStream baostream = new ByteArrayOutputStream();
OutputStream outStream = new GZIPOutputStream(baostream);
outStream.write(orig.getBytes("UTF-8"));
outStream.close();
byte[] compressedBytes = baostream.toByteArray(); // toString not always possible
// uncompress it
InputStream inStream = new GZIPInputStream(
new ByteArrayInputStream(compressedBytes));
ByteArrayOutputStream baoStream2 = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
int len;
while ((len = inStream.read(buffer)) > 0) {
baoStream2.write(buffer, 0, len);
}
String uncompressedStr = baoStream2.toString("UTF-8");
System.out.println("orig: " + orig);
System.out.println("unc: " + uncompressedStr);
这篇关于Java:创建GZIPInputStream时出错:不是GZIP格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!