知识大全 开发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对象式数据管理功能(三)[2]

DELPHI基础教程:开发Delphi对象式数据管理功能(三)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(三)[1]

DELPHI基础教程:开发Delphi对象式数据管理功能(三)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(一)[3]

DELPHI基础教程:开发Delphi对象式数据管理功能(一)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(二)[3]

DELPHI基础教程:开发Delphi对象式数据管理功能(二)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(四)[3]

DELPHI基础教程:开发Delphi对象式数据管理功能(四)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(五)[3]

DELPHI基础教程:开发Delphi对象式数据管理功能(五)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(二)[4]

DELPHI基础教程:开发Delphi对象式数据管理功能(二)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(一)[5]

DELPHI基础教程:开发Delphi对象式数据管理功能(一)[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(一)[4]

DELPHI基础教程:开发Delphi对象式数据管理功能(一)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(一)[2]

DELPHI基础教程:开发Delphi对象式数据管理功能(一)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快