今天在把一个 golang 写的 bencode 编解码库迁移到 js ,才发现 nodejs 的 stream 是有多难用。。。
ReadStream 的 read 方法太难用,调用 read ,如果读取长度超过了已经准备好的字节数据长度,会直接返回 null(即便剩余文件字节长度远远超过了读取的长度)。
测试用的文件是一个 bt 种子,只在解析 pieces 的时候会出问题,因为 pieces 的长度是 6700 ,但是缓冲区剩余可读字节没有这么多,read(6700)会自己返回 null 。
开始我尝试自己创建 Buffer ,每次只读 1 个字节,用循环处理拼接 Buffer ,后来觉得这样做太操蛋了。
之后看爆栈上的解答,说要监听 readable 事件,因为可能会多次回调。
https://stackoverflow.com/questions/41478192/nodejs-readable-read-return-null我对 nodejs 的 stream 不是很熟练,我不想写一些 hack 的代码,求问有一些好用的三方 Stream 库吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/959915
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.