购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.6 缓冲区编解码

编写一个网络应用程序避免不了要使用编解码器。编解码器的作用就是将原始字节数据与目标程序数据格式进行互转,因为网络中都是以字节码的数据形式来传输数据的。编解码器又可以细分为两类:解码器和编码器。

4.6.1 解码器和编码器

编码器和解码器都是实现了字节序列与业务对象转化。那么,如何进行区分呢?

从消息角度看,编码器是转换消息格式为适合传输的字节流,而相应的解码器是将传输数据转换为程序的消息格式。

从逻辑上看,编码器是从消息格式转化为字节流,是出站(outbound)操作;而解码器是将字节流转换为消息格式,是入站(inbound)操作。

4.6.2 缓冲区解码

Node. js缓冲区解码都是“read”方法。以下是常用的解码API。

·buf. readBigInt64BE([offset])

·buf. readBigInt64LE([offset])

·buf. readBigUInt64BE([offset])

·buf. readBigUInt64LE([offset])

·buf. readDoubleBE([offset])

·buf. readDoubleLE([offset])

·buf. readFloatBE([offset])

·buf. readFloatLE([offset])

·buf. readInt8([offset])

·buf. readInt16BE([offset])

·buf. readInt16LE([offset])

·buf. readInt32BE([offset])

·buf. readInt32LE([offset])

·buf. readIntBE(offset, byteLength)

·buf. readIntLE(offset, byteLength)

·buf. readUInt8([offset])

·buf. readUInt16BE([offset])

·buf. readUInt16LE([offset])

·buf. readUInt32BE([offset])

·buf. readUInt32LE([offset])

·buf. readUIntBE(offset, byteLength)

·buf. readUIntLE(offset, byteLength)

上述API从方法命名上就能看出其用意。以buf.readInt8([offset])方法为例,该API是从缓冲区读取8位整型数据。以下是一个使用示例。

其中,offset用于指示数据在缓冲区的索引的位置。如果offset超过了缓冲区的长度,则会抛出“ERR_OUT_OF_RANGE”异常信息。

本节例子可以在“buffer-demo/buffer-read.js”文件中找到。

4.6.3 缓冲区编码

Node. js缓冲区编码都是“write”方法。以下是常用的编码API。

·buf. write(string[,offset[,length]][,encoding])

·buf. writeBigInt64BE(value[,offset])

·buf. writeBigInt64LE(value[,offset])

·buf. writeBigUInt64BE(value[,offset])

·buf. writeBigUInt64LE(value[,offset])

·buf. writeDoubleBE(value[,offset])

·buf. writeDoubleLE(value[,offset])

·buf. writeFloatBE(value[,offset])

·buf. writeFloatLE(value[,offset])

·buf. writeInt8(value[,offset])

·buf. writeInt16BE(value[,offset])

·buf. writeInt16LE(value[,offset])

·buf. writeInt32BE(value[,offset])

·buf. writeInt32LE(value[,offset])

·buf. writeIntBE(value, offset, byteLength)

·buf. writeIntLE(value, offset, byteLength)

·buf. writeUInt8(value[,offset])

·buf. writeUInt16BE(value[,offset])

·buf. writeUInt16LE(value[,offset])

·buf. writeUInt32BE(value[,offset])

·buf. writeUInt32LE(value[,offset])

·buf. writeUIntBE(value, offset, byteLength)

·buf. writeUIntLE(value, offset, byteLength)

上述API从方法命名上就能看出其用意。以buf.writeInt8(value[,offset])方法为例,该API是将8位整型数据写入缓冲区。以下是一个使用示例。

上述例子,最终在缓冲区的数据为[02,04]。

本节例子可以在“buffer-demo/buffer-write.js”文件中找到。 R4NkZ9TciTgpxTrkg1r/lyp+xjt7IGXVn7y+2Zq6Z+5JoCPG5PzW3x3lJRvjgfU3

点击中间区域
呼出菜单
上一章
目录
下一章
×