哪位老师指点一下,这是Buffer的bug吗?消息中包含换行符toString数据丢失
发布于 6 年前 作者 misland 2308 次浏览 来自 问答

我用tcp收到的消息和发送的消息在经过buffer转换后数据却丢失了一部分,问题原因就在于中间有一个换行符,\r ,没有这个一切正常,找了好久实在没有头绪,api也看了,没有相关资料,只能来这里请教老师们了,希望能帮我解答一下,十分感谢 wer.png

5 回复

‘\r’是回车符,回车的现象:“回到行的开始,继续输出,新输出的内容视觉上覆盖了旧内容”。 你代码的行为:先输出\vMSH,然后’\r’会回到行首,重新输出JIK,JIK在视觉上是覆盖了MSH的,你可以换成’MSGXXX\rJIK’试试,可以发现输出的是JIKXXX

这是 console 的 format 行为吧,数据其实没丢,你可以打印下 console.log({inspect() { return this.x }, x: 'yahaha'}),还能给你输出 yahaha 呢,但是显然这个输出的对象值本身没有变。

@Shasharoman 毕竟是社区老师,确实如此,只是看上去像是数据丢失了而已,实际上Buffer对象是完整的,所有的信息都能拿到,是我思维太单一导致耽误了大量时间,谢谢您的回复

@hyj1991 嗯嗯,是的,是我思维单一了,还是社区的老师们厉害呀,么么哒

lz都输出了 data.length 难道没发现么~ 另,Buffer应该是用 data.byteLength

回到顶部