我需要从流中读取大量数据。发送前不知道数据的长度。流中没有特殊的“结束字符”。问题:我得到了流的多个数据事件,我不知道什么时候开始处理数据。
我知道其他编程语言中的一种模式,我可以在其中找出 TCP 流中是否有数据(例如 iOS 和 Objective-C,我有类似 NSInputStream 对象的“hasBytesAvailable”之类的东西)。
node.js 中是否存在类似的东西?或者我如何解决 node.js 的问题?
我需要从流中读取大量数据。发送前不知道数据的长度。流中没有特殊的“结束字符”。问题:我得到了流的多个数据事件,我不知道什么时候开始处理数据。
我知道其他编程语言中的一种模式,我可以在其中找出 TCP 流中是否有数据(例如 iOS 和 Objective-C,我有类似 NSInputStream 对象的“hasBytesAvailable”之类的东西)。
node.js 中是否存在类似的东西?或者我如何解决 node.js 的问题?
你所指的方法并不像你说的那样做。它们只告诉您可以在不阻塞的情况下读取多少数据。根本不是一回事。
读取到流末尾的唯一方法是读取到流的末尾。完成后您将获得一个 EOS。
当它来自网络流时,实际上并没有“数据长度”这样的东西:考虑到对等方可以永远保持写入数据。
在事先不知道数据长度、没有 EOF 字符和保持打开的套接字的情况下,您将不得不利用数据的结构属性,即动态解析它。这当然假定数据具有已知的结构属性(例如定义的视频格式);如果没有,要么你的问题根本无法解决,要么你有一个“XY问题”(你过早地定义了一个解决方案而没有完全定义真正的问题)。