我用 Java 编写了一个应用程序,用于使用 Deflaor 和 Inflator 压缩和解压缩字符串,但是当我运行它时出现以下异常:
Deflated String:x��Q�n�0��@>"C��E����3�,[
d����9��P������x�O�����hcy��L
�Ct��{~m�I:�$�%\HD+�I�
�NwG
Exception in thread "main" java.util.zip.DataFormatException: incorrect header check
at java.util.zip.Inflater.inflateBytes(Native Method)
at java.util.zip.Inflater.inflate(Inflater.java:223)
at java.util.zip.Inflater.inflate(Inflater.java:240)
at sample_ftp.Sample_ftp.main(Sample_ftp.java:70)
Java Result: 1
我的代码:
// Encode a String into bytes
String inputString = "Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Ek kar doon aasmaan zameen Kaho yaaron kya karoon kya nahin Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Reh jaoon jaise main haar ke Aur choome vo mujhe pyaar se Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar";
byte[] input = inputString.getBytes("UTF-8");
// Compress the bytes
byte[] output1 = new byte[100];
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output1);
compresser.end();
System.out.println("Deflated String:"+new String(output1));
String str=new String(output1);
byte output2[]=str.getBytes("UTF-8");
// Decompress the bytes
Inflater decompresser = new Inflater();
decompresser.setInput(output2);
byte[] result = new byte[10000];
int resultLength = decompresser.inflate(result);
decompresser.end();
// Decode the bytes into a String
String outputString = new String(result, 0, resultLength, "UTF-8");
System.out.println("Deflated String:"+outputString);
最佳答案
这里的代码有几个问题:
1) 您的假设是随 deflator 返回的字节数组 output1
可以是没有有效编码的有效 String
- 从此处的代码可以看出:
String str=new String(output1);
byte output2[]=str.getBytes("UTF-8");
相反,不要不必要地转换 bye 数组表示,而是直接按原样传递它:decompresser.setInput(output1)
编辑:根据评论中的新要求进行了更改
2) 您正在为您的 inflate
设置一个空白字节数组,这也会导致一个空白字符串(此处):
byte[] result = new byte[10000];
int resultLength = decompresser.inflate(result);
3) 您已将压缩缓冲区大小限制为 100;我增加了它以容纳您的整个字符串
byte[] output1 = new byte[input.length];
您可以在此处使用从您的字符串派生的字节数组或先前的字节数组
编辑:正如评论中所指出的,要求是专门从字符串获取字节数组,从而以字符串格式 Base64 表示二进制数据 编码方案将发挥作用,为此修改代码:
import org.apache.axis.encoding.Base64;
更改代码:
public static void main(String[] args) {
try {
// Encode a String into bytes
String inputString = "Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Ek kar doon aasmaan zameen Kaho yaaron kya karoon kya nahin Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Reh jaoon jaise main haar ke Aur choome vo mujhe pyaar se Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar";
byte[] input = inputString.getBytes("UTF-8");
// Compress the bytes
byte[] output1 = new byte[input.length];
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output1);
compresser.end();
String str = Base64.encode(output1);
System.out.println("Deflated String:" + str);
byte[] output2 = Base64.decode(str);
// Decompress the bytes
Inflater decompresser = new Inflater();
decompresser.setInput(output2);
byte[] result = str.getBytes();
int resultLength = decompresser.inflate(result);
decompresser.end();
// Decode the bytes into a String
String outputString = new String(result, 0, resultLength, "UTF-8");
System.out.println("Deflated String:" + outputString);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DataFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
输出:
Deflated String:eJzNUbtuwzAM/BX+QD4iQ6eiRdDH0PESM6YsWwpku4X99Tna7lC03QK0g42TeOQdTwe1FpLQG+Sw4GhjBxR5xAS5TA4NgRQeQxp09pt7fm3OSTqEJJElXBJIRCv7SaUK7U53R40oTn/Q8u3uZRQLcsTwKfyTideKZdLOobgatQwfcF11XRj/b1hdNJZzKw02Ym0c/ZV522l3kaBI5Qygp98kMzrVxHgsi0eX13DIyxtMS+/vG/+P2Puk5GCQGCSOJzNB6DnLkGoheKYujyq1+3vPtDCv6xYyVKLeZMaT2vYEzdK7rG3ukMX9WOTEV+rUm7uxMd2CI/PPAr4Cer8r5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Deflated String:Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Ek kar doon aasmaan zameen Kaho yaaron kya karoon kya nahin Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Reh jaoon jaise main haar ke Aur choome vo mujhe pyaar se Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar
.....
关于java - 线程 "main"java.util.zip.DataFormatException : incorrect header check 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20917623/