我要将数据从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流”。
答案 0 :(得分:0)
答案 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()版本。