2011-09-21 38 views
2

据我所知,流的大小是固定的,无论是内存还是文件流。是否有像串口或网络套接字连接这样的开放式流的术语?非大小限制流函数的术语是什么?

我正在使用Delphi XE。我查看了TStream后面的类。我想创建一个适用于串口,网络套接字,键盘输入或模拟数据的通用类的接口。这些将是没有指定长度的数据流,包含可用数据的数据包。

我不知道正确的搜索词。也许正确的术语是一个套接字,但这似乎是一个更具体的网络术语。

回答

4

流,管道,插座,文件,无论...他们都是相似的,如下所示:

  • 他们被初始化(打开),然后销毁(关闭);
  • 你在这个结构上有一个句柄(实例);
  • 您使用读取和写入方法,它可以检索比请求更少的内容(它允许未定义/无限/抽象流)。

POSIX/UNIX世界,比如“一切皆文件”,甚至网络,设置,CPU,设备...

在Delphi中,你可以完全从TStream继承实现这种行为。

即使是Seek方法也不需要处理所有情况。您可以拥有单向/单向流,只读流或只写流。

然后,你可以共享相同的代码与各种TStream实现,文件,网络,一些内存,键盘,屏幕,无论什么......你甚至可以嵌套流,以便添加on-即时压缩,加密,复制......

所以,如果你是在Delphi的世界,只是称之为“流”,实现了一个TStream ...快乐编码!

2

这仍然是一个流。您可以将其称为顺序访问流,以区分它与随机访问流。在实施TStream后代时,如果有人调用Seek方法来寻找反向,前向或任何其他不允许的用法,则可以自由使Seek方法发出异常。即可以读取,但不能写入

东西是,并可以写入,但不读是东西。这些条款不包含固定大小。

+0

这就是所谓的**单向**。 –

+2

@Downvoter,*单向*表明允许寻找,但仅限于一个方向(可能是前向)。如果底层数据源不支持查找,您可以通过执行'Seek'来模拟它,以便它调用'Read'并放弃它所读取的内容。如果你不能跳过输入,你不执行'Seek',使它看起来像你的话,我不认为*单向*是一个好名词。 –

0

听通信的端口,插槽或其它类型的有时被称为嗅探协议分析器

为了实现这个通用方法并不是微不足道的。

您将不得不为每种类型的通信实现特定的抽象层。例如,在不知道协议格式的情况下监听串行端口是注定要失败的。

+0

我希望做一个真正简单的界面,使AnsiCharacters的缓冲区,可提供完全不考虑它包含的数据的通知事件。接收数据的对象将其存储到另一个缓冲区中,并决定是否通知下一级是否有可接受的数据。 [数据消费者] <---- [原始数据解析器] <---- [串行数据源] –

+0

TB的的缓冲区是一个较好的方法,因为AnsiStrings应该在数据分组中被避免。 –

+0

这些不会是这个级别的字符串。数据可能不完整。字节会更好的描述。我试图传达的数据不会是Unicode。 –

相关问题