合并(分割)流
合并(分割)流
/// <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.
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/10505843.html

浙公网安备 33010602011771号