GZipStream压缩之后返回byte[],如何判断byte[]是否被压缩过?在线请教高手

liuying2500 2009-04-20 05:03:31
public byte[] Compress(byte[] b)
{
//压缩的方法,GZipStream实现
}

byte[] retByte = Compress(b);

问题:我如何判断这个byte数组retByte是否被压缩过呢??请高手指教
...全文
451 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuying2500 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 soaringbird 的回复:]
byte[] Compress(byte[] b)
压缩返回的数组并不只是压缩后的数据,还有gzip的一些元数据的定义等等。
压缩后的那个byte[],前面都有一段相同的数据(我试了一些数据,是相同的),就是
1F-8B-08-00-00-00-00-00-04-00-ED-BD-07-60-1C-49-96-25-26-2F-6D-CA-7B-7F-4A-F5-4A-D7-E0-74-A1-08-80-60-13-24-D8-90-40-10-EC-C1-88-CD-E6-92-EC-1D-69-47-23-29-AB-2A-81-CA-65-56-65-5D-66-16-40-CC-ED-9D-BC-F7-DE-7B-EF-BD-F7-D…
[/Quote]

谢谢,经过昨天的研究,我认为你说的方式才是解决这个问题的正道,马上就结贴。
soaringbird 2009-04-20
  • 打赏
  • 举报
回复
byte[] Compress(byte[] b)
压缩返回的数组并不只是压缩后的数据,还有gzip的一些元数据的定义等等。
压缩后的那个byte[],前面都有一段相同的数据(我试了一些数据,是相同的),就是
1F-8B-08-00-00-00-00-00-04-00-ED-BD-07-60-1C-49-96-25-26-2F-6D-CA-7B-7F-4A-F5-4A-D7-E0-74-A1-08-80-60-13-24-D8-90-40-10-EC-C1-88-CD-E6-92-EC-1D-69-47-23-29-AB-2A-81-CA-65-56-65-5D-66-16-40-CC-ED-9D-BC-F7-DE-7B-EF-BD-F7-DE-7B-EF-BD-F7-BA-3B-9D-4E-27-F7-DF-FF-3F-5C-66-64-01-6C-F6-CE-4A-DA-C9-9E-21-80-AA-C8-1F-3F-7E-7C-1F-3F-22
所以,你可以判断byte[]前面是否包含这一段数据来判断是否是压缩过的数据。当然,限于正常的压缩数据,如果是变造的数据那就另说了。
liuying2500 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tang_fu 的回复:]
public boolen Compress(byte[] b)
{
try
{
//压缩的方法,GZipStream实现
}
catch(except e)
{
.........
}
return true;
}

boolen retByte = Compress(b);
[/Quote]

非常感谢你回复,但是我compress方法必须要返回byte[]
tang_fu 2009-04-20
  • 打赏
  • 举报
回复
public boolen Compress(byte[] b)
{
try
{
//压缩的方法,GZipStream实现
}
catch(except e)
{
.........
}
return true;
}

boolen retByte = Compress(b);

liuying2500 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuyq11 的回复:]
比较解压缩内容是否与原内容一致
[/Quote]

这个源数据我是无法判断的,client端传递到WebService的数据就算没压缩过,也是被序列化了的,都是byte[]
liuying2500 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ericzhangbo1982111 的回复:]
GZipStream
以前用过

你想判断的话在GZipStream里面修改下啊。
[/Quote]

能说的再稍微详细一点吗?谢谢
liuying2500 2009-04-20
  • 打赏
  • 举报
回复
我的程序序列化和解压缩之后都返回的是byte[],解压缩是发生在client端传递给WebService端的参数很大的时候,所以我要判断这些数据是否压缩过
wuyq11 2009-04-20
  • 打赏
  • 举报
回复
比较解压缩内容是否与原内容一致
supesa 2009-04-20
  • 打赏
  • 举报
回复
你的需求很奇怪,你为什么要判断是否要解压呢?无法从字节上判断是否压缩过。
chowyi 2009-04-20
  • 打赏
  • 举报
回复
GZipStream s = new GZipStream();
s.CanRead?压缩过:未
ericzhangbo1982111 2009-04-20
  • 打赏
  • 举报
回复
GZipStream
以前用过

你想判断的话在GZipStream里面修改下啊。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧