⑵ Write方法
Write方法从内存流内部缓沖池的当前位置开始写入二进制数据其实现如下
function TMemoryStreamWrite(const Buffer; Count: Longint) Longint;
var
Pos: Longint;
begin
if (FPosition >= ) and (Count >= ) then
begin
Pos := FPosition + Count;
if Pos > then
begin
if Pos > FSize then
begin
if Pos > FCapacity then
SetCapacity(Pos)
FSize := Pos;
end;
SystemMove(Buffer Pointer(Longint(FMemory) + FPosition)^ Count)
FPosition := Pos;
Result := Count;
Exit;
end;
end;
Result := ;
end;
Buffer中存储要写入流的二进制数据如果要写入的数据的字节超出了流的内存池的大小则调用SetCapacity方法再分配内存然后用内存复制函数将Buffer中的数据复制到FMemory中接着移动位置指针并返回写入数据的字节数分析这段程序可以知道FCapacity的值和FSize的值是不同的
⑶ Clear方法
Clear方法消除内存流中的数据将Memory属性置为nil并将FSize和FPosition 的值设为其实现如下
procedure TMemoryStreamClear;
begin
SetCapacity()
FSize := ;
FPosition := ;
end;
⑷ LoadFromStream和LoadFromFile方法
LoadFromStream方法首先根据传入的Stream的Size属性值重新分配动态内存然后调用Stream的ReadBuffer方法往FMemory中复制数据结果Stream的全部内容在内存中有了一份完整拷贝其实现如下
procedure TMemoryStreamLoadFromStream(Stream: TStream)
var
Count: Longint;
begin
StreamPosition := ;
Count := StreamSize;
SetSize(Count)
if Count <> then StreamReadBuffer(FMemory^ Count)
end;
LoadFromFile与LoadFromStream是一对方法LoadFromFile首先创建了一个TFileStream对象然后调用LoadFromStream方法将FileStream文件流中的数据写入MemoryStream中
返回目录DELPHI基础教程
编辑推荐
Java程序设计培训视频教程
JEE高级框架实战培训视频教程
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLEG数据库开发优化指南
Java程序性能优化让你的Java程序更快更稳定
C嵌入式编程设计模式
Android游戏开发实践指南
[] [] [] [] []