• 合并(分割)流


    合并(分割)流

    /// <author>cxg 2018-9-14</author>
    /// 合并流&分割流
    
    unit uStream;
    
    interface
    
    uses
      System.SysUtils, System.Classes;
    
    type
      /// <summary>
      /// stream.size type: int64 (8 bytes)
      /// </summary>
      TSize = packed record
        size: int64;
      end;
    
    type
      TynStream = class(TDataModule)
      private
        { Private declarations }
      public
        { Public declarations }
        /// <summary>
        /// 将AStream1和AStream2两个流合并为dest一个流,
        /// </summary>
        /// <param name="ADest">合并后的流</param>
        /// <param name="AStream1">流1</param>
        /// <param name="AStream2">流2</param>
        class procedure MergeStream(ADest, AStream1, AStream2: TStream);
        /// <summary>
        /// 将source一个流,分为stream1, stream2两个流,
        /// </summary>
        /// <param name="ASource">待分割的流</param>
        /// <param name="AStream1">流1</param>
        /// <param name="AStream2">流2</param>
        class procedure SplitStream(ASource, AStream1, AStream2: TStream);
      end;
    
    var
      ynStream: TynStream;
    
    implementation
    
    {%CLASSGROUP 'Vcl.Controls.TControl'}
    
    {$R *.dfm}
    
    class procedure TynStream.MergeStream(ADest, AStream1, AStream2: TStream);
    var
      LSize: TSize;
    begin
      ADest.Position := 0;
      LSize.size := AStream1.Size;
      ADest.Write(LSize, SizeOf(Int64));
      LSize.size := AStream2.Size;
      ADest.Write(LSize, SizeOf(Int64));
      AStream1.Position := 0;
      ADest.CopyFrom(AStream1, AStream1.Size);
      AStream2.Position := 0;
      ADest.CopyFrom(AStream2, AStream2.Size);
    end;
    
    class procedure TynStream.SplitStream(ASource, AStream1, AStream2: TStream);
    var
      LCount, LCount2: Int64;
      LSize: TSize;
    begin
      ASource.Position := 0;
      ASource.Read(LSize, SizeOf(Int64));
      LCount := LSize.size;
      ASource.Read(LSize, SizeOf(Int64));
      LCount2 := LSize.size;
      AStream1.Position := 0;
      AStream1.CopyFrom(ASource, LCount);
      AStream2.Position := 0;
      AStream2.CopyFrom(ASource, LCount2);
    end;
    
    end.
    

      

  • 相关阅读:
    Django匆匆一眼却解答了多年疑惑
    2020年度总结,似乎没有什么大的长进,似乎也得到了一些收获
    Django搭建示例项目实战与避坑细节
    真香,理解记忆法学习Python基础语法
    如何让文科生5分钟写上Python
    Django官方为什么没有标准项目结构
    用PyCharm打个专业的招呼
    MySQL/MariaDB读写分离配置
    Mysql/Mariadb主从复制
    图解CentOS系统启动流程
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10505843.html
Copyright © 2020-2023  润新知