C# 通过BinaryReader将字节数组解压缩为字符串,生成空字符串
我正在尝试解压字节数组,并使用二进制读取器将其转换为字符串。执行以下代码时,流内位置从0更改为数组的长度,但str始终为空字符串C# 通过BinaryReader将字节数组解压缩为字符串,生成空字符串,c#,memorystream,gzipstream,binaryreader,C#,Memorystream,Gzipstream,Binaryreader,我正在尝试解压字节数组,并使用二进制读取器将其转换为字符串。执行以下代码时,流内位置从0更改为数组的长度,但str始终为空字符串 BinaryReader br = null; string str = String.Empty; using (MemoryStream inStream = new MemoryStream(pByteArray)) { GZipStream zipStream = new GZipStream(inStream, CompressionMode.De
BinaryReader br = null;
string str = String.Empty;
using (MemoryStream inStream = new MemoryStream(pByteArray))
{
GZipStream zipStream = new GZipStream(inStream, CompressionMode.Decompress);
BinaryReader br = new BinaryReader(zipStream);
str = br.ReadString();
inStream.Close();
br.Close();
}
您没有说明数据是如何压缩的,但下面是一个压缩和解压缩缓冲区的完整示例:
using System;
using System.IO;
using System.IO.Compression;
using System.Text;
class Program
{
static void Main()
{
var test = "foo bar baz";
var compressed = Compress(Encoding.UTF8.GetBytes(test));
var decompressed = Decompress(compressed);
Console.WriteLine(Encoding.UTF8.GetString(decompressed));
}
static byte[] Compress(byte[] data)
{
using (var compressedStream = new MemoryStream())
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
{
zipStream.Write(data, 0, data.Length);
zipStream.Close();
return compressedStream.ToArray();
}
}
static byte[] Decompress(byte[] data)
{
using (var compressedStream = new MemoryStream(data))
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
using (var resultStream = new MemoryStream())
{
zipStream.CopyTo(resultStream);
return resultStream.ToArray();
}
}
}
你能添加一个简短但完整的程序来演示这个问题吗?你不正确地使用了GZipStream。我以为GZipStream可以把这个流作为输入参数,我想让它解压缩。这个错误是什么意思?“GZip头中的幻数不正确。请确保您正在传递GZip流。”