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.
    

      

  • 相关阅读:
    对比Microsoft RemoteFX与VMware PCoIP
    SATA port selector and port muliplier 产品
    从并行 SCSI 到串行 SCSI
    转:快速远程桌面——Nomachine NX(ubuntu 10.10安装NX详解)
    全面分析:SATA2硬盘的发展和优缺点
    axel vpc
    转:网络带宽测量工具之iperf
    转:使用测试工具iPerf监控无线网络性能
    远程维护Helpdesk应用VNC
    QOS定义
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10505843.html
Copyright © 2011-2022 走看看