知识大全 开发Delphi对象式数据管理功能(三)[3]
Posted 知
篇首语:读书是最好的学习。追随伟大人物的思想,是最富有趣味的一门科学。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 开发Delphi对象式数据管理功能(三)[3]相关的知识,希望对你有一定的参考价值。
DELPHI基础教程:开发Delphi对象式数据管理功能(三)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Position属性的定义中包含了两个读写控制方法 GetPosition和SetPosition:
riter = class(TFiler)
private
FRootAncestor: TComponent;
…
function GetPosition: Longint;
procedure SetPosition(Value: Longint)
public
…
property Position: Longint read GetPosition write SetPosition;
property RootAncestor: TComponent read FRootAncestor write FRootAncestor;
end;
GetPosition和SetPosition方法实现如下
function riter GetPosition: Longint;
begin
Result := FStream Position + FBufPos;
end;
procedure riter SetPosition(Value: Longint)
var
StreamPosition: Longint;
begin
StreamPosition := FStream Position;
只清除越界的缓冲区
if (Value < StreamPosition) or (Value > StreamPosition + FBufPos) then
begin
WriteBuffer;
FStream Position := Value;
end
else FBufPos := Value StreamPosition;
end;
WriteBuffer是riter对象定义的私有方法 它的作用是将Writer 对象内部缓冲区中的有效数据写入流中 并将FBufPos置为 Writer对象的FlushBuffer对象就是用WriteBuffer方法刷新缓冲区
在SetPosition方法中 如果Value值超出了边界(FStream Position FStream Position + FBufPos) 就将缓冲区中的内容写入流 重新设置缓冲区在流中的相对位置 否则 就只是移动FBufPos指针
riter方法的实现
⑴ WriteListBegin和WriteListEnd的实现
这两个方法都是用于写连续若干个相同类型的值 WriteListBegin写入VaList标志 WriteListEnd写入VaNull标志
procedure riter WriteListBegin;
begin
WriteValue(vaList)
end;
procedure riter WriteListEnd;
begin
WriteValue(vaNull)
end;
这两个方法都调用riter对象的WriteValue方法 该方法主要用于写入TValueType类型的值
procedure riter WriteValue(Value: TValueType)
begin
Write(Value SizeOf(Value))
end;
⑵ 简单数据类型的写入
简单数据类型指的是整型 字符型 字符串型 浮点型 布尔型等 riter对象都定义了相应的写入方法
WriteInteger方法用于写入整型数据
procedure riter WriteInteger(Value: Longint)
begin
if (Value >= ) and (Value <= ) then
begin
WriteValue(vaInt )
Write(Value SizeOf(Shortint))
end else
if (Value >= ) and (Value <= ) then
begin
WriteValue(vaInt )
Write(Value SizeOf(Smallint))
end else
begin
WriteValue(vaInt )
Write(Value SizeOf(Longint))
end;
end;
WriteInteger方法将整型数据分为 位 位和 位三种 并分别用vaInt vaInt 和VaInt
WriteBoolean用于写入布尔型数据
procedure riter WriteBoolean(Value: Boolean)
begin
if Value then
WriteValue(vaTrue) else
WriteValue(vaFalse)
end;
与其它数据类型不同的是布尔型数据只使用了标志位是存储布尔值 在标志位后没有数据
WriteFloat方法用于写入浮点型数据
procedure riter WriteFloat(Value: Extended)
begin
WriteValue(vaExtended)
Write(Value SizeOf(Extended))
end;
字符串 True False 和 nil 作为标识符传入是由于Delphi的特殊需要 如果是 True False 和 nil 则写入VaTrue VaFalse和VaNil 否则写入VaIdent标志 接着以字符串形式写入标识符
WriteString方法用于写入字符串
procedure riter WriteString(const Value: string)
var
L: Integer;
begin
L := Length(Value)
if L <= then
begin
WriteValue(vaString)
Write(L SizeOf(Byte))
end else
begin
WriteValue(vaLString)
Write(L SizeOf(Integer))
end;
Write(Pointer(Value)^ L)
end;
Delphi的字符串类型有两种 一种长度小于 个字节 另一种长度小于 个字节 WriteString方法区分这两类情况存储字符串 一种设置VaStirng标志 另一种设置VaLString 然后存储字符串的长度值 最后存储字符串数据
cha138/Article/program/Delphi/201311/25098相关参考
DELPHI基础教程:开发Delphi对象式数据管理功能(三)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(三)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(一)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(二)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(四)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(五)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(二)[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(一)[5] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(一)[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(一)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快