- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的程序中尝试使用 GZIP 流压缩/解压缩数据,当使用字符集“ISO-8859-1”时,一切正常,但当将字符集更改为“UTF-8”时,我得到错误消息“线程“主”java.util.zip.ZipException 中的异常:不是 GZIP 格式”。这是我的代码:
public static String compress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
System.out.println("String length : " + str.length());
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes());
gzip.close();
String outStr = out.toString("UTF-8");
System.out.println("Output String lenght : " + outStr.length());
System.out.println("Output : " + outStr.toString());
return outStr;
}
public static String decompress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
System.out.println("Input String length : " + str.length());
GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(str.getBytes("UTF-8")));
BufferedReader bf = new BufferedReader(new InputStreamReader(gis, "UTF-8"));
String outStr = "";
String line;
while ((line=bf.readLine())!=null) {
outStr += line;
}
System.out.println("Output String lenght : " + outStr.length());
return outStr;
}
public static void main(String[] args) throws IOException {
String string = "my data";
System.out.println("after compress:");
String compressed = compress(string);
System.out.println(compressed);
System.out.println("after decompress:");
String decomp = decompress(compressed);
System.out.println(decomp);
}
最佳答案
String outStr = out.toString("UTF-8");这个“输出”是压缩字节流,将它编码为字符串然后从字符串解码它会丢失一些字节。这可能是 java 的一个错误。要解决它,你可以在compress()中将字节编码为String返回,例如:
String infoBase64Encode = new String(Base64.encodeBase64(out.toByteArray()))
在decompress()中将String解码为bytes返回,如:
String infoBase64Decode = Base64.decodeBase64(decryptAESinfo)
完整代码如下:
public static String compress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
System.out.println("String length : " + str.length());
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes());
gzip.close();
String outStr = new String(Base64.encodeBase64(out.toByteArray()));
System.out.println("Output String lenght : " + outStr.length());
System.out.println("Output : " + outStr.toString());
return outStr;
}
public static String decompress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
System.out.println("Input String length : " + str.length());
GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(Base64.decodeBase64(str)));
String outStr = "";
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[256];
int n;
while ((n = gis.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
System.out.println("Output String lenght : " + outStr.length());
return new String(out.toByteArray());
}
public static void main(String[] args) throws IOException {
String string = "my data";
System.out.println("after compress:");
String compressed = compress(string);
System.out.println(compressed);
System.out.println("after decompress:");
String decomp = decompress(compressed);
System.out.println(decomp);
}
关于java - 使用 ISO 字符集压缩文件时线程 "main"java.util.zip.ZipException : Not in GZIP format. 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26528256/
我有一个执行 shell 脚本的 ProcessBuilder,它工作得很好,直到我想从变量向 shell 脚本添加参数。 Exception in thread "main" java.lang.N
这个问题在这里已经有了答案: Xcode - How to fix 'NSUnknownKeyException', reason: … this class is not key value co
我正在尝试将一些自定义 UIView 从 .xib 文件加载到 UIScrollView 中,但我不断收到“线程 1:EXC_BAD_ACCESS”。 因为这是我第一次真正尝试加载自定义 UIView
satya@ubuntu:~/hadoop/bin$ hadoop namenode -format DEPRECATED: Use of this script to execute hdfs co
所以我正在编写一个小程序来计算学生最好成绩的平均值,当我运行它时,我在线程“main”java.util.InputMismatchException中收到此错误异常。 我看到一篇文章说要使用 nex
我在编译项目时遇到错误- Exception in thread "main" java.lang.StackOverflowError at sun.reflect.Reflection.g
我正在使用 Selenium 填写 Web 表单。我将库客户端组合 3.0.0 beta 3 添加到文档中。我的 Firefox 版本应该是最新的。但是,出现错误。如何解决?或者使用 webdrive
我的任务是创建一个java程序,实现关于BMI转换器的GUI,该转换器可以获取高度和体重。目前尚未完成,但我收到以下错误: Exception in thread "main" java.lang.N
您好,我是 Apache mahout 的新手,我在运行“classify-20newsgroups.sh”这个自动从互联网获取数据集的示例时遇到错误。 错误轨迹: hduser@raj-Lenovo
我在 GameViewController.swift 中有以下代码: override func viewDidLoad() { super.viewDidLoad() let sc
我正在做一个毕业项目,我需要在 PHP 中启用 pthreads,因为我需要多线程。我用了a tutorial ,但我收到此错误:Fatal error class 'Thread' not foun
我正在尝试在通过我的 Java 应用程序加载的 DOM html 页面上执行名为“returnAllLinkTexts()”的 Javascript 函数。下面一行由 Swing 按钮执行。 mysc
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 7 年前。 每当我在我正在处理的一段代码上按
我正在使用 JAXB 将给定的输入 Xml 文件解码为 Java 对象然后将其编码(marshal)回 Xml 字符串。我的 Xml 文件如下所示: 定义.类: @XmlRoo
这是 Native.cpp : // Native.cpp : Defines the exported functions for the DLL application. // #include
我是一名优秀的程序员,十分优秀!