3
나는 그것을 얻지 못한다. 나는 수년 동안 비슷하거나 동일한 접근법을 사용해 왔지만 결코 경험하지 못했습니다.GZip 왕복으로 1 바이트 이상 잘라 내기
오늘까지 GZip 왕복으로 인해 1 바이트 이상이 잘 리거나 데이터가 왜곡되어 표시되는 이유가 있습니다.
다른 테스트가 영향을 미치지 않는지 확인하기위한 간단한 테스트를 작성했습니다.
'길이 불일치'로 인해 항상 실패합니다.
내가 미쳤다고 누군가 나를 따라 줄 수 있습니까? :)
감사
leppie
TEST는
using System;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
class Program
{
const int BUFFER_SIZE = 8192;
static void Main(string[] args)
{
var filename = args[0];
var filedata = File.ReadAllBytes(filename);
var cmp = Compress(filedata);
var dec = Decompress(cmp);
Assert(filedata, dec);
Console.ReadLine();
}
static void Assert(byte[] orig, byte[] data)
{
if (orig.Length != data.Length)
{
Debug.Fail("length mismatch");
}
for (int i = 0; i < orig.Length; i++)
{
Debug.Assert(orig[i] == data[i], "data mismatch");
}
}
static byte[] Compress(byte[] data)
{
var input = new MemoryStream(data);
var output = new MemoryStream();
var s = new GZipStream(output, CompressionMode.Compress);
byte[] buffer = new byte[BUFFER_SIZE];
int read = 0;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
s.Write(buffer, 0, read);
}
return output.ToArray();
}
static byte[] Decompress(byte[] data)
{
var input = new MemoryStream(data);
var s = new GZipStream(input, CompressionMode.Decompress);
var output = new MemoryStream();
byte[] buffer = new byte[BUFFER_SIZE];
int read = 0;
while ((read = s.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
return output.ToArray();
}
}
나는 다른 버퍼 크기, 모두 같은 결과도 제대로 스트림을 닫는 그것을 시도했다.