我想在java中解压一个在python中被gzip压缩的字符串。在
通常,我在python中对压缩字符串使用base64编码,然后在java中执行解压缩之前对压缩字符串进行解码。这在使用base64编码时可以正常工作。在
但是有没有一种方法可以在不使用base64编码的情况下,在python中对gzip压缩的java字符串进行解压呢。在
实际上,我想用http将压缩后的二进制数据发布到一个服务器上,在那里二进制数据被解压缩。这里的压缩和httppost是用python完成的,服务器端是java。在
我在python中尝试了不使用base64 encode的代码,并使用缓冲读取器在java中读取它,然后使用getBytes()将读取的压缩字符串转换为byte[],getBytes()被提供给GZIPInputStream进行解压缩。但这引发了一个例外:java.io.IOException: Not in GZIP format at
java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:154)
at java.util.zip.GZIPInputStream.(GZIPInputStream.java:75)
at java.util.zip.GZIPInputStream.(GZIPInputStream.java:85)
at GZipFile.gunzipIt(GZipFile.java:58)
at GZipFile.main(GZipFile.java:42)
请给我一个解决方案来执行压缩和解压没有任何编码。有没有一种方法可以用python在httppost中发送二进制数据?在
这是python中的压缩代码:
^{pr2}$
这是java中的解压代码://$Id$
import java.io.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import javax.xml.bind.DatatypeConverter;
import java.util.Arrays;
public class GZipFile
{
public static String readCompressedData()throws Exception
{
String compressedStr ="";
String nextLine;
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("comp_dump")));
try
{
while((nextLine=reader.readLine())!=null)
{
compressedStr += nextLine;
}
}
finally
{
reader.close();
}
return compressedStr;
}
public static void main( String[] args ) throws Exception
{
GZipFile gZip = new GZipFile();
byte[] contentInBytes = DatatypeConverter.parseBase64Binary(readCompressedData());
String decomp = gZip.gunzipIt(contentInBytes);
System.out.println(decomp);
}
/**
* GunZip it
*/
public static String gunzipIt(final byte[] compressed){
byte[] buffer = new byte[1024];
StringBuilder decomp = new StringBuilder() ;
try{
GZIPInputStream gzis = new GZIPInputStream(new ByteArrayInputStream(compressed));
int len;
while ((len = gzis.read(buffer)) > 0) {
decomp.append(new String(buffer, 0, len));
}
gzis.close();
}catch(IOException ex){
ex.printStackTrace();
}
return decomp.toString();
}
}