{--------------------------------------------------------------------------------
*单元:
*日期:
*作者
---------------------------------------------------------------------------------}
unit umemoryStream;
interface
uses Classes,sysutils,windows;
type
SMemoryStream = Class
m_BufferSize : longint;
m_UseSize :longint;
private
Buf:Pchar;
Procedure Realloc(var ANeSize:longint);
public
procedure SetSize(ANewSize:longint);
constructor Create();
destructor Destory();
procedure LoadFromStream(AStream:TStream);
procedure LoadFromFile(AFileName:String);
procedure SavetoFile(AFileName:String);
procedure SavetoStream(AStream:TStream);
end;
implementation
constructor SMemoryStream.Create();
begin
Getmem(Buf,8192000); //SetSize
m_BufferSize:=8192000;
end;
destructor SMemoryStream.Destory();
begin
Freemem(Buf,8192000);
end;
procedure SMemoryStream.LoadFromStream(AStream:TStream);
begin
AStream.Position:=0;
if (AStream.Size<>0) then
begin
AStream.Read(Buf^,AStream.Size);
m_useSize:=AStream.Size;
end;
end;
procedure SMemoryStream.SavetoFile(AFileName:String);
var
Stream:TStream;
begin
Stream:=TFileStream.Create(AFileName,fmCreate);
try
SavetoStream(Stream);
finally
Stream.Free;
end;
end;
procedure SMemoryStream.SavetoStream(AStream:TStream);
begin
if (m_usesize<>0) then
begin
AStream.WriteBuffer(Buf^,m_usesize);
end;
end;
procedure SMemoryStream.LoadFromFile(AFileName:String);
var
Stream:TStream;
begin
Stream:=TFileStream.Create(AFileName,fmOpenRead );
Try
LoadFromStream(Stream);
Finally
Stream.Free;
end;
end;
Procedure SMemoryStream.Realloc(var ANeSize:longint);
begin
// GlobalAlloc(ANeSize);
end;
procedure SMemoryStream.SetSize(ANewSize:longint);
begin
m_BufferSize := ANewSize;
Realloc(ANewSize);
end;
end.