[转载]关于EncdDecd/Soap.EncdDecd单元的EncodeStre

EncdDecd/Soap.EncdDecd单元提供了BASE64编、解码的两个函数:

    procedure EncodeStream(Input, Output: TStream);
    procedure DecodeStream(Input, Output: TStream);

在使用这两个函数的时候,要注意使用方法,以提高程序效率。

  两个函数都有两个TStream类型参数。而TStream是抽象类, 其派生类主要有TMomoryStream,TStringStream,TFileStream等,都可以作为参数传递进去,对於Input参数,无论TMemoryStream,TStringStream,TFileStream都不会影响性能。但是对於Output参数,由於压缩的结果是写往OutputStream,因此压缩过程中不断地执行TStream的Write方法,如果是TMemoryStream,那效率就会极低,因为TMemoryStream里不断调用Write方法的结果是,不断地向Windows要求分配内存!从而导致性能下降!而TStringStream和TFileStream则没有这个问题. 因此,建议,Output参数最好不用TMemoryStream.
  如果输出确实需要TMemoryStream类型,那么通过提前分配输出TMemoryStream的内存空间! 因为效率下降的原因是不断的申请内存空间。对于输出内存空间的计算公式为:

    1、假设编码前的字节数为X,那麽编码后的字节数为 (X + 2) div 3 * 4

    2、假设解码前的字节数是X,那麽解码后的字节数约为 (X + 3) div 4 * 3
    需要注意的是:与编码不同的是,解码的字节数不是确定的,差值在0~2之间.

posted @ 2013-04-02 00:28  Wishmeluck  阅读(226)  评论(0编辑  收藏  举报