大家好,我定义一个结构体
  TMyrecord = packed record
    mhByte1: Byte;
    mhByte2: Byte;
    mhByte3: Byte;
    mhArryData: array[0..1, 0..256 - 1] of Byte; 
    mhArryOtherData: array[0..1, 0..128 - 1] of Byte; 
    mhSmallint1: Smallint;
    mhSmallint2: Smallint;
    mhTime: TDateTime;
    mhmhSmallint3: Smallint;
  end;
我客户端要在Internet上用TCP/IP协议每秒实时传输这样一个结构体,我想要一种压缩后能生成固定大小的压缩后的数据buffer数组,然后我定长发送,服务器端接收定长的压缩数据解压还原。 
我找了些算法,不是用流,就是经常create,free指针,生成的压缩数据还是不定长的,这样我每次传输还得发一个压缩后的长度,请教有固定压缩率的算法吗?即压缩这样一个结构体后长度一样,保证我定长发送,而且最好不要经常创建,释放内存的,定义成静态内存的为好。谢谢大家了,有差不多的就行。或给我些建议。

解决方案 »

  1.   

    在internet上传输啊,是为了图个小的。得压缩的啊。只是希望压缩数据包的大小是定长的。
      

  2.   

    这样啊,我以发原数据长度是固定的,能有固定压缩率, 压成定长的算法呢。那象一般网络传输,多数也都压缩吧,我用的Indy 的TCPIP控件,用的writebuffer,没用流。有什么好的解决思路吗,是用压缩的流吗?
      

  3.   

    不要太害怕流,用WriteBuffer以内存流TMemoryStream为例可以这么发送数据
    xxx.WriteBuffer(ms.Memory^, ms.Size);
      

  4.   

    主要是我不愿意经常create和Free. 我的固定压缩率不是有损,是希望有一个无损压缩的算法,压缩后是一个固定长度,这样我就不用经常变长发送了。