3
|
HostileFork says dont trust SE · 技术社区 · 14 年前 |
1
6
简单的答案是不,我们不能… 按照解析的工作方式,它可能需要回滚到输入字符串的前一部分,当它遇到流的最后一个字符时,这实际上可能是完整输入的头。 端口在从端口获取输入时将其数据复制到字符串缓冲区,因此事实上,没有任何“优先”字符串可供分析回滚到。就像量子物理学…只是看着它,它不再存在了。 但正如你在篮板上所知道的…不不是答案。;-) 也就是说,有一种方法可以解析数据 从 一个港口,因为它被抓住,但它有点工作。 你要做的是使用一个缓冲区,
根据您的数据,数量可以是1字节或1千字节,使用有意义的。 一旦新的输入被添加到缓冲区中,分析它并添加逻辑以确定是否匹配 部分 在那个缓冲区。 如果有匹配的内容,则从缓冲区中删除/部分匹配的内容,并继续解析,直到没有解析为止。 然后重复以上操作,直到输入结束。 我在一个具有“始终开启”TCP端口的实时edi tcp服务器中使用了它,以便分解(可能)连续的输入数据流,而这实际上是端到端的piggy备份消息。 细节 设置此系统的最佳方法是使用/no wait and loop,直到端口关闭(您只收到一个而不是“”)。 另外,请确保在分析时有一种检查数据完整性问题的方法(如跳过的字节或错误的消息),否则,您将 从未 到达终点。 在我的系统中,当缓冲区超过特定的大小时,我尝试了一个替代规则,它跳过字节,直到一个模式 可以 在小溪的下游。如果找到了一条,则会记录一个错误,存储部分消息并发出警报,以便系统管理员对消息进行排序。 嗯! |
2
3
我认为马克西姆的回答足够好了。此时,端口上的分析尚未实现。我认为以后不可能实现,但我们必须先解决其他问题。 正如马克西姆所说,即使现在你也能做到,但这完全取决于你到底想做什么。 当然,您可以解析大型文件,而无需将它们完全读取到内存中。知道你想要解析的内容总是很好的。例如,所有大文件(如音乐和视频文件)都被划分为块,因此您可以使用copy seek获取这些块并对其进行解析。 或者,如果您只想获取多个网页的标题,您可以只读取,比如说,前1024个字节,然后在此处查找标题标记,如果失败,请读取更多字节,然后重试… 这正是允许本地解析端口所必须做的。 在curecode数据库中添加一个愿望: http://curecode.org/rebol3/ |
Tristan · 如何在写入数据后打开txt文件? 6 年前 |
Adam Hanek · 从命令创建文件夹并打印到文本文件 6 年前 |
SoSo · 如何打开具有部分名称的文件并在c#[关闭]中读取其行 6 年前 |
O. Schultz · 如何逐行提取特定关键字,然后声明为变量 6 年前 |
thatsHeavyDoc · 缓冲区清除-输出不符合预期 6 年前 |