用Java压缩数据并用C#解压缩数据

时间:2013-11-05 09:57:55

标签: c# java compression

我要将数据从java发送到c#,我需要在java中压缩数据并在c#中解压缩。 有没有相同的方法将java中的数据压缩和解压缩到c#? 谢谢

我在java和c#中写了一个例子。我在java中使用java.util.zip.GZIPOutPutStream压缩数据,在c#中使用System.IO.Comperssion.GZipStream来解压缩数据。但是在c#中我得到“GZip标头中的幻数不正确。请确保传入GZip流”错误。

在Java中:

  encode="admin";
      ByteArrayOutputStream baos;
    baos = new ByteArrayOutputStream(encode.getBytes().length);
      GZIPOutputStream gs = new GZIPOutputStream(baos);
      gs.write(encode.getBytes());
      System.out.println("Zip "+baos.toByteArray().toString());
      gs.close();
      encode=baos.toByteArray().toString();//.toByteArray().toString();

}

在C#中:

  1: var bigStream = new GZipStream(new MemoryStream(ASCIIEncoding.UTF8.GetBytes(obj)),                   CompressionMode.Decompress);
            var bigStreamOut = new System.IO.MemoryStream();
            byte[] b2=new byte[4096];
            bigStream.Read(b2,0,b2.Length);
            string hh1=Encoding.UTF8.GetString( bigStreamOut.GetBuffer()).Trim();

我收到错误“GZip标头中的幻数不正确。请确保您在第1行传入GZip流”。

2 个答案:

答案 0 :(得分:0)

也许结帐zlibnetjzlib

答案 1 :(得分:0)

我尝试过和你一样的事情,对我来说它有效。 我使用的代码是:

爪哇:

// Enjoy the horrible constructor chaining here
try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new GZIPOutputStream(new FileOutputStream("java.gz"))))) {
    out.write("Hello world from Java 1.7!");
    // Make sure everything gets written
    out.flush();
} // Auto out.close() by using the try-catch-with-resources pattern

并在C#中:

GZipStream zip = new GZipStream(new FileStream("java.gz", FileMode.Open), CompressionMode.Decompress);
// Excuse me if there was an easier way to read the strings.
int character = zip.ReadByte();
while (character != -1)
{
    Console.Write((char)character);
    character = zip.ReadByte();
}
Console.ReadLine();

对我而言,结果是一个很好的信息:"来自Java 1.7的Hello world!",这正是我在Java中输入它的方式。那么也许你给C#错误的文件或者错过了一些命令?

编辑根据您给定的代码: 如果您使用编码将数据写入基于以下内容的文件:

encode=baos.toByteArray().toString();//.toByteArray().toString();

它将输出对象的内存信息,而不是实际数据本身。 ToByteArray()是您要存储在文件中的字节,而不是字节数组的toString()版本。