Delphi 流 Tstream 2

本文详细介绍了Delphi中的TStream对象,包括其属性Position和Size,以及常用方法如CopyFrom、Read、Write等。TStream作为抽象类,提供了在不同媒介中存储数据的通用接口,简化了内存、文件、资源之间的数据拷贝。同时,文章还讨论了TMemoryStream对象的特性,如Capacity、LoadFromStream和LoadFromFile等方法。
摘要由CSDN通过智能技术生成

这几天为网友逆向一个图片加密算法,结果算法容易,但是到写代码时写得一肚子火,因为把文件读写的基本函数忘掉了。

连流对象的几个基本属性和方法都忘了运用,浪费不少时间,后来还是上网搜索一翻,终于搞定。还是有必要把这篇文章收集起来。 

Delphi TStream详解

Stream对象,又称流式对象,是TStream、THandleStream、TFileStream、TMemoryStream、TResourceStream和TBlobStream等的统称

它们分别代表了在各种媒介上存储数据的能力,它们将各种数据类型(包括对象和部件)
在内存、外存和数据库字段中的管理操作抽象为对象方法,并且充分利用了面向对象技术的优点,应用程序可以相当容易地在各种Stream对象中拷贝数据。


  下面介绍各种对象的数据和方法及使用方法。

TStream对象

  TStream对象是能在各种媒介中存储二进制数据的对象的抽象对象。从TStream 对象继承的对象用于在内存、Windows资源文件、磁盘文件和数据库字段等媒介中存储数据。
  Stream中定义了两个属性:Size和Position。它们分别以字节为单位表示的流的大小和当前指针位置。

TStream中定义的方法用于在各种流中读、写和相互拷贝二进制数据。

因为所有的Stream对象都是从TStream中继承来的,

所以在TStream中定义的域和方法都能被Stream对象调用和访问。

此外,又由于面向对象技术的动态联编功能,TStream为各种流的应用提供了统一的接口,简化了流的使用;不同Stream对象是抽象了对不同存储媒介的数据上的操作,因此,TStream的需方法为在不同媒介间的数据拷贝提供了最简捷的手段。

TStream的属性和方法

  1. Position属性 
声明:property Position: Longint;
  Position属性指明流中读写的当前偏移量。
  2. Size属性
  声明:property Size: Longint;
Size属性指明了以字节为单位的流的的大小,它是只读的。
  3. CopyFrom方法
  声明:function CopyFrom(Source: TStream; Count: Longint): Longint;
CopyFrom从Source所指定的流中拷贝Count个字节到当前流中, 并将指针从当前位置移动Count个字节数,函数返回值是实际拷贝的字节数。
  4. Read方法
  声明:function Read(var Buffer; Count: Longint): Longint; virtual; abstract;
Read方法从当前流中的当前位置起将Count个字节的内容复制到Buffer中,并把当前指针向后移动Count个字节数,函数返回值是实际读的字节数。如果返回值小于Count,这意味着读操作在读满所需字节数前指针已经到达了流的尾部。
  Read方法是抽象方法。每个后继Stream对象都要根据自己特有的有关特定存储媒介的读操作覆盖该方法。而且流的所有其它的读数据的方法(如:ReadBuffer,ReadComponent等)在完成实际的读操作时都调用了Read方法。面向对象的动态联编的优点就体现在这儿。因为后继Stream对
象只需覆盖Read方法,而其它读操作(如ReadBuffer、ReadComponent等)都不需要重新定义,而且TStream还提供了统一的接口。
  5. ReadBuffer方法
  声明:procedure ReadBuffer(var Buffer; Count: Longint);
  ReadBuffer方法从流中将Count个字节复制到Buffer 中, 并将流的当前指针向后移动Count个字节。如读操作超过流的尾部,ReadBuffer方法引起EReadError异常事件。
  6. ReadComponent方法
  声明:function ReadComponent(Instance: TComponent): TComponent;
ReadComponent方法从当前流中读取由Instance所指定的部件,函数返回所读的部件。ReadComponent在读Instance及其拥有的所有对象时创建了一个Reader对象并调用它的ReadRootComponent方法。
  如果Instance为nil,ReadComponent的方法基于流中描述的部件类型信息创建部件,并返回新创建的部件。
  7. ReadComponentRes方法
  声明:function ReadComponentRes(Instance: TComponent): TComponent;
ReadComponentRes方法从流中读取Instance指定的部件,但是流的当前位置必须是由WriteComponentRes方法所写入的部件的位置。
  ReadComponentRes
首先调用ReadResHeader方法从流中读取资源头,然后调用ReadComponent方法读取Instance。如果流的当前位置不包含一个资源头。ReadResHeader将引发一个EInvalidImage异常事件。在Classes库单元中也包含一个名为ReadComponentRes的函数,该函数执行相同的操作,只不过它基于应
用程序包含的资源建立自己的流。
  8. ReadResHeader方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值