Распаковка массива байтов в строку с помощью BinaryReader дает пустую строку
Я пытаюсь распаковать массив байтов и получить его в строку с помощью двоичного считывателя. При выполнении следующего кода позиция inStream изменяется от 0 до длины массива, но str всегда является пустой строкой.
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();
}
1 ответ:
Вы не показали, как происходит сжатие данных, но вот полный пример сжатия и распаковки буфера:
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(); } } }