在node.js中,很多时候我们只能在一次回调中得到一坨data,而往往需要把几坨data拼在一起才可以进行后续工作。
首先,我以为用String的+=可以很好地解决这个问题,可是node.js的文档中并不提倡这么做。
所以,我写了一个简单的类,基本工作机制是用一个array把这些data串起来,像块链表一样。
并且,提供search、readUntil、read等函数。
search函数用来顺序查找这个buffer链表里有没有包含另一个buffer ,readUntil是消耗这个链表中的数据,直到遇到某个字符串或buffer, read函数就是读取n个byte.
此外,我觉得用String += 来“攒”buffer也挺好用的(用“binary”编码),性能也不差。
但是node.js的文档中有这么一句话:
‘binary’ - A way of encoding raw binary data into strings by using only the first 8 bits of each character. This encoding method is deprecated and should be avoided in favor of Buffer objects where possible. This encoding will be removed in future versions of Node.
为啥要去掉binary编码呢?
先用binary编码串起来,应该不会有乱码。 不过我的应用场景是传输二进制数据,以上是我的猜测。 至于效率,我感觉+=的效率并不低啊,这个操作太频繁了,v8应该在内存管理方面进行过优化。