【发布时间】:2012-02-08 16:44:53
【问题描述】:
我想在 C# 中解压缩一些 DeflateCoded 数据(PDF 提取)。 不幸的是,我每次都会遇到异常“解码时发现无效数据。”。 但是数据是有效的。
private void Decompress()
{
FileStream fs = new FileStream(@"S:\Temp\myFile.bin", FileMode.Open);
//First two bytes are irrelevant
fs.ReadByte();
fs.ReadByte();
DeflateStream d_Stream = new DeflateStream(fs, CompressionMode.Decompress);
StreamToFile(d_Stream, @"S:\Temp\myFile1.txt", FileMode.OpenOrCreate);
d_Stream.Close();
fs.Close();
}
private static void StreamToFile(Stream inputStream, string outputFile, FileMode fileMode)
{
if (inputStream == null)
throw new ArgumentNullException("inputStream");
if (String.IsNullOrEmpty(outputFile))
throw new ArgumentException("Argument null or empty.", "outputFile");
using (FileStream outputStream = new FileStream(outputFile, fileMode, FileAccess.Write))
{
int cnt = 0;
const int LEN = 4096;
byte[] buffer = new byte[LEN];
while ((cnt = inputStream.Read(buffer, 0, LEN)) != 0)
outputStream.Write(buffer, 0, cnt);
}
}
有人有什么想法吗? 谢谢。
【问题讨论】:
-
为什么前两个字节不相关?
-
流解码器使用 RFC1951。与 DeflateStreams 结合使用时,前两个字节无关紧要。如果流解码器使用的是 RC1950,那么我也必须使用第一个字节。
-
你做了什么来证明错误是不正确的并且数据实际上是有效的。
标签: c# deflate compression