zoukankan      html  css  js  c++  java
  • [转载]关于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之间.

  • 相关阅读:
    js继承《转》
    千分位分割正则
    所有事件失效
    658. Find K Closest Elements
    278. First Bad Version
    153. Find Minimum in Rotated Sorted Array
    11. Container With Most Water
    205. Isomorphic Strings
    75. Sort Colors
    695. Max Area of Island
  • 原文地址:https://www.cnblogs.com/luckForever/p/7255254.html
Copyright © 2011-2022 走看看