变量压缩,一个变体类型(Variant),在内存中能不能压缩与解压(100分)

  • 主题发起人 主题发起人 要离
  • 开始时间 开始时间

要离

Unregistered / Unconfirmed
GUEST, unregistred user!
一个变体类型(Variant),在内存中能不能压缩与解压,因为我把一个变体保存在文本中有600多K,压缩一下结果1K不到,所以我现把这变体在内存中压缩一下,这样传输会快很多,然后再解压,这样速度会很快。(因为我的构架是三层的,有远程数据要传输)
 
关注,我也在做个三层的项目,希望能从中有点得到点启示!
 
当然可以,olevariant有一种数据类型是byte数组。
delphi中有个相关的例子。
 
to 远帆,
我的Variant是个比较复杂的结构,我是把一个数据集打包到这个变体中的,其中包括字段名,字段类型,记录等,等于是我自己做的一个数据包吧,我要远程传到应用服务器,所以希望是越小越好
 
使用bzip压缩和解压,如果尺寸小于1K就不用压缩了。
相关类:TCompressionStream,TDecompressionStream。
 
刚才说错了,应该是zlib。
 
这个是Variant和Stream相互转换的函数,stream压缩的例子就太多了
procedure VariantToStream(const Data: OleVariant
Stream: TStream);
var
p: Pointer;
begin
p := VarArrayLock(Data);
try
Stream.Write(p^, VarArrayHighBound(Data,1) + 1)
//assuming low bound = 0
finally
VarArrayUnlock(Data);
end;
end;

function StreamToVariant(Stream: TStream): OleVariant;
var
p: Pointer;
begin
Result := VarArrayCreate([0, Stream.Size - 1], varByte);
p := VarArrayLock(Result);
try
Stream.Position := 0
//start from beginning of stream
Stream.Read(p^, Stream.Size);
finally
VarArrayUnlock(Result);
end;
end;
 
variant有一个lock函数,(手头没有delphi,sorry),锁定后就可以直接对byte数组操作。
 
to yhee,
能不能麻烦你写个这两个类的应用例子,争对我个问题
 
我的三层机构传输也是压缩的。ZLIB。不过是字符串压缩成字符数组
 
请教,压缩成流行吗,在三层中,好像没有流的接口呀
 
后退
顶部