通过 TCompressionStream 压缩后的流怎么判断?

sczyq 2007-04-26 03:26:04
通过 TCompressionStream 压缩后的流是否的标志?

由于存于数据库中的流,有些经过压缩,有些未压缩,怎么区分?

压缩时,采用 TCompressionStream 组件,能否从流的前几个字节来区分?

...全文
488 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
constantine 2007-04-27
  • 打赏
  • 举报
回复
好像压缩过一次的不能再压缩,如果是的话,嘿嘿
ccrun.com 2007-04-27
  • 打赏
  • 举报
回复
加一个Head才是王道。鉴定完毕。
sczyq 2007-04-27
  • 打赏
  • 举报
回复
在前面加了标志。

typedef struct _ZlibHabdle
{
DWORD Ident; // 0x62696C5A = 'Zlib'
DWORD Size; // 压缩后的大小 + siseof(TZlibHabdle), 用于校验
} TZlibHabdle;

huzhangyou 2007-04-26
  • 打赏
  • 举报
回复
不过这好像是压缩时候判断的
压缩以后好像无法判断
所以还是推荐标志发
或者从TCompressionStream 继承
并加标志
huzhangyou 2007-04-26
  • 打赏
  • 举报
回复
其中:TcompressionLevel(压缩类型),它由如下几个定义:

   ①、 clNone :不进行数据压缩;

   ②、 clFastest:进行快速压缩,牺牲压缩效率;

   ③、 clDefault:进行正常压缩;

   ④、 clMax: 进行最大化压缩,牺牲速度;

这个属性应该是可以判断的
huzhangyou 2007-04-26
  • 打赏
  • 举报
回复
class TStreamData:public TStream{
bool flag;
TCompressionStream * cs;
}

判断flag就可以了
TStreamData从TStream继承
读出来Assign就可以了
然后判断flag
sczyq 2007-04-26
  • 打赏
  • 举报
回复
看来只有在前面加结构了。
ccrun.com 2007-04-26
  • 打赏
  • 举报
回复
>>>直接从流中分析出来

这个。。。恐怕就有难度了吧。
sczyq 2007-04-26
  • 打赏
  • 举报
回复
ccrun(老妖)(www.ccrun.com) 的办法是一种解决办法.

但若是能够直接从流中分析出来, 该有多好
过客猫2022 2007-04-26
  • 打赏
  • 举报
回复
关注
ccrun.com 2007-04-26
  • 打赏
  • 举报
回复
自定义一个类似文件头的结构(成员自己定义,如是否压缩的标志,流的长度,或者校验和字符串之类的),压缩完流以后将这个结构附在流的前面,那么判断时,取回结构大小的数据,判断这个头结构是否合法,如果合法,证明是压缩过的流,反之则是不曾压缩的流。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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