Tstream 和TmemoryStream流操作
流的作用很广泛,用作缓存非常合适。
主要方法及属性:
- position
用来定位流的开始位置
也可以用seek来定位流的起始位置:
function Seek(Offset: Longint; Origin: Word): Longint; overload; virtual;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; overload; virtual;
function Seek(const Offset: Int64; Origin: Word): Int64; overload; deprecated; inline;
property Position: Int64 read GetPosition write SetPosition;
- write和writebuff
用来将信息写入流
Classes中这样描述:
procedure WriteBuffer(const Buffer; Count: Longint); overload;
procedure WriteBuffer(const Buffer: TBytes; Count: Longint); overload;
procedure WriteBuffer(const Buffer: TBytes; Offset, Count: Longint); overload;
- read和readbuffer
从流中读取信息
Classes中这样描述:
procedure ReadBuffer(var Buffer; Count: Longint); overload;
procedure ReadBuffer(var Buffer: TBytes; Count: Longint); overload;
procedure ReadBuffer(var Buffer: TBytes; Offset, Count: Longint); overload;
- copyFrom方法
拷贝一个流
function CopyFrom(const Source: TStream; Count: Int64): Int64;
- LoadFromFile方法(TmemoryStream)
将一个文件载入到流
procedure LoadFromFile(const FileName: string);
- LoadFromStream方法(TmemoryStream)
拷贝一个流
procedure LoadFromStream(Stream: TStream);
自己的一个demo:
写入动态数组及读取:
procedure TForm1.btn1Click(Sender: TObject);
var
arr,arrb:array of Double; //定义一个动态数据
Tstream: TMemoryStream;
I: Integer;
tempOut, tempIn:PChar;
begin
SetLength(arr,10);
for I := 0 to 10 do
begin
arr[i]:=i;
end;
Tstream:=TMemoryStream.Create;
tempIn := AllocMem(SizeOf(double)*10); //为pchar指针申请一块内存,大小为要写入的内容的大小
CopyMemory(tempIn, @arr[0],SizeOf(double)*10); //将要写入的数组拷贝到pchar指针指向的内存
Tstream.WriteBuffer(tempIn^,SizeOf(double)*10); //第一种方法,用pchar指针写入
// Tstream.WriteBuffer(@arr[0],SizeOf(double)*10); //直接写入动态数组,注意动态数组
//的第一个元素的地址为:@数组名[0]
tempOut := AllocMem(SizeOf(double)*10); //申请一块内存
Tstream.Position:=0; //设置要读取的内容的起始位置
Tstream.ReadBuffer(tempOut^,SizeOf(double)*10); //读取流中的数据到pchar指针指向的内存
SetLength(arrb, 10); //设置动态数组的大小
CopyMemory(@arrb[0],tempOut,SizeOf(double)*10); //拷贝读取数据到动态数组
FreeAndNil(Tstream); //不再使用流时,销毁流
end;
end.