测试了下.NET下的GZIPStream好象不行谁能解决送2000分吧:)
解决方案 »
- c#将excel导入到系统日期时间格式问题
- 当Generic.xaml遇上BitmapImage:发现一个疑似WPF Bug而又不似Bug的问题
- vs2005 2349 错误! 我都重装系统了!还是没用!急~
- 用C#写的winform代码,在窗体使用combobox后,打开速度慢的问题
- c#实现ping命令遇到的问题。
- 关于XML查询!!!
- datagrid中datagridboolcolumn问题(难)
- ToolStripSplitButton看起来和DropDownButton一样啊?
- C#连接远程数据库。。。急
- 如何回到Form1?
- Winform中DataGridView的水平滚动条只控制后几列
- 怎样才能一行商品,一行广告的显示出来.我做的广告每一行都 一样
问题解决的,给2000分我啊。测试通过的代码,供大家参考:private byte[] CompressFile(FileStream fs)
{
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
MemoryStream ms = new MemoryStream(); GZipStream gZipStream = new GZipStream(ms, CompressionMode.Compress);
gZipStream.Write(buffer,0,buffer.Length);
gZipStream.Close();
ms.Flush();
byte[] data= ms.ToArray();
ms.Close();
return data;
}
private void DecompressFile(byte[] stream, string file)
{
MemoryStream ms = new MemoryStream(stream);
GZipStream gzipStream = null;
FileStream fs = null;
try
{
gzipStream = new GZipStream(ms, CompressionMode.Decompress);
fs = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.Write);
int length = ReadAllBytesFromStream(gzipStream, fs);
fs.Flush();
}
catch (Exception e)
{ }
finally
{
ms.Close();
fs.Close();
gzipStream.Close();
}
}
private static int ReadAllBytesFromStream(Stream stream, FileStream fs)
{
int offset = 0;
int totalCount = 0;
while (true)
{
byte[] buffer = new byte[1000];
int bytesRead = stream.Read(buffer, 0, 1000);
if (bytesRead == 0)
{
break;
}
fs.Write(buffer, 0, bytesRead);
offset += bytesRead;
totalCount += bytesRead;
}
return totalCount;
}
我现在还没明白解压PDF是什么意思!
这个不晓得是否有用:
http://zlping.javaeye.com/blog/308461
非常感谢...内说里面的stream是什么压缩的:(
一般而言是flate,如果是加密的PDF,还要先解密,trailer里面有加密信息的描述
stream起两个作用,是加密,而是压缩,解压后的明文才是PDF语法,如何解析PDF语法,这个才是难点你现在才是文件的物理结构分析阶段,要提取内容还有很长得路要走啊
1430 0 obj<</Length 3342/Filter/FlateDecode>>stream ??? endstream endobj例如我获取到一个这样的OBJ 怎么解压呢..
stream之间的数据是二进制,打开文件读取的时候一定要以二进制方式打开,你看看是不是这个问题
6楼的几个函数我改了一下才能用.. private byte[] CompressFile(FileStream fs) //加压
{
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
MemoryStream ms = new MemoryStream(); GZipStream gZipStream = new GZipStream(ms, CompressionMode.Compress); gZipStream.Write(buffer, 0, buffer.Length); gZipStream.Close();
ms.Flush();
byte[] data = ms.ToArray();
ms.Close();
return data;
} private void DecompressFile(byte[] stream, string file) //解压
{
MemoryStream ms = new MemoryStream(stream);
GZipStream gzipStream = new GZipStream(ms, CompressionMode.Decompress);
FileStream fs = null;
try
{
gzipStream = new GZipStream(ms, CompressionMode.Decompress);
fs = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.Write);
int length = ReadAllBytesFromStream(gzipStream, fs); fs.Flush();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
ms.Close();
fs.Close();
gzipStream.Close();
}
} private static int ReadAllBytesFromStream(Stream stream, FileStream fs) //流 to 文件
{
int offset = 0;
int totalCount = 0;
int size = 100; //10759
byte[] buffer = new byte[1928 + size];//要解压的流的长度+size //1928
while (true)
{
int bytesRead = stream.Read(buffer, offset, size);
if (bytesRead == 0)
{
break;
}
fs.Write(buffer, offset, bytesRead);
offset += bytesRead;
totalCount += bytesRead;
}
return totalCount;
}
1430 0 obj<</Length 3342/Filter/FlateDecode>>stream ??? endstream endobj/Filter/FlateDecode 说明是使用FlateDecodeFlateDecode yes (PDF 1.2) Decompresses data encoded using the zlib/deflate compression
method, reproducing the original text or binary data.如何判断应使用zlib还是deflate来解压缩呢?