zoukankan      html  css  js  c++  java
  • 合并(分割)流

    合并(分割)流

    /// <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.
    

      

  • 相关阅读:
    Appium+unittest+PageObject实例
    monkeyrunner简单用法
    Mac电脑修改系统文件夹的权限
    UIImage剪切
    LLDB 打印 frame
    打开qq在线聊天
    获取当地时间
    微信支付SDK使用心得
    获取当前星期几
    UIView相对于屏幕的frame
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10505843.html
Copyright © 2011-2022 走看看