0

我要将数据从 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();

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

4

2 回答 2

0

也许结帐zlibnetjzlib

于 2013-11-05T11:59:49.790 回答
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() 版本。

于 2013-11-05T12:19:23.837 回答