从流中读取大量数据:是否存在类似“stream.hasBytesAvailable”的内容

时间:2012-09-21 08:24:44

标签: node.js networking socket.io

我需要从流中读取大量数据。发送前不知道数据的长度。流中没有特殊的“结束字符”。 问题:我得到了流的多个数据事件,我不知道何时开始处理数据。

我知道其他编程语言的模式,我可以找到,如果TCP流中还有数据(例如iOS和objective-C,我有类似“hasBytesAvailable”的NSInputStream对象)。

node.js中是否存在类似的内容?或者我如何用node.js解决问题?

2 个答案:

答案 0 :(得分:0)

您提到的方法不会按照您的说法执行。它们只告诉你可以在不阻塞的情况下读取多少数据根本就不一样。

读取到流末尾的唯一方法是读取到流的末尾。完成后你会得到一个EOS。

当它来自网络流时,实际上并没有“数据长度”这样的东西:考虑到对等体可以永久地写入数据。

答案 1 :(得分:0)

如果不事先知道数据的长度,没有EOF字符,并且使用保持打开的套接字,则必须使用数据的结构属性,即即时解析它。当然,这假定数据具有已知的结构属性(例如定义的视频格式);如果没有,要么你的问题根本无法解决,要么你有一个“XY问题”(你过早地定义了一个解决方案而没有完全定义真正的问题)。