`

04.缓冲区Buffer

阅读更多

Buffer.js 代码如下

/*----------创建Buffer实例-----------*/

//创建方法1,分配10个字节的缓存
var buf1 = new Buffer(10);

//创建方法2,指定字节数组(数组元素大小在[0,255]之间)
var buf2 = new Buffer([255,0,97,158]);

var buf2_extend = new Buffer(buf2);

//创建方法3,指定字符串(编码可为"ascii","utf8","utf16le","ucs2","base64","hex",默认为"utf-8",)
var buf3 = new Buffer('缓冲区内容','utf-8');

var buf4 = new Buffer('缓冲区内容');

/*-----------Buffer类方法------------*/

//合并缓冲区
//Buffer.concat(list[, totalLength])
var concatBuffer = Buffer.concat([new Buffer([0xaa,0xaa]),buf2]);
console.log('合并的内容:',concatBuffer);
var concatBuffer2 = Buffer.concat([new Buffer([0xaa,0xaa]),buf2],4);
console.log('限制合并总字节数的合并内容:',concatBuffer2);

/*-----------Buffer类实例属性------------*/

//返回Buffer实例的内存长度
console.log('buf4创建的缓冲区的字节长度:',buf4.length);

/*-----------Buffer类实例方法------------*/

//读取缓冲区,解码缓冲区数据并使用指定编码返回字符串
//格式如buf.toString([encoding[, start[, end]]])
//start,指定开始读取缓冲区索引的位置,默认为0
//end,结束位置(读取内容不包含end),默认为buf.length
console.log('buf4创建的缓冲区内容:',buf4.toString());

var readContent = buf4.toString('utf8',3,8);
console.log('读取buf4部分内容:',readContent,'读取的内容的字符长度为:',
			readContent.length);

//写入缓冲区并返回实际写入的字节数
//空间不足时写入部分字符串,但不写入部分字符
//格式如buf.write(string[, offset[, length]][, encoding])
//offset,开始写入缓冲区的索引值,默认为0;length,写入的字节数,默认为buf4.length-offset;
//encoding,使用的编码,默认为"utf-8"
var len = buf4.write('这里是重写的缓冲区内容,部分可见');

console.log('写入缓冲区buf4字节数:',len);
console.log('写入后buf4缓冲区内容:',buf4.toString());

//获取或设置缓冲区指定字节
console.log('buf2[2]:',buf2[2]);
buf2[2] = 98;/*0x62*/
console.log('buf2:',buf2);

//用指定的字节填充缓冲区
//格式如buf.fill(value[, offset][, end])
buf1.fill(97);
console.log('填充后的缓冲区为:',buf1.toString());

//把缓冲区字节数组转化为json的组织方式
var jsonData = buf4.toJSON();

console.log('buf4的字节数组表达方式转化为json后:',jsonData);

//比较俩换冲区,返回值为-1表示第一个缓冲区在前,0表示俩缓冲区相同,1表示第一个缓冲区在后
var compareResult = new Buffer('abcde').compare(new Buffer([97,98,99,100,101,102]));
console.log('比较后返回的数字:',compareResult);

//比较俩缓冲区是否相等,返回布尔值
var equalResult = new Buffer('abcde').equals(new Buffer([97,98,99,100,101]));
console.log('是否相等:',equalResult);

//拷贝缓冲区
//格式为buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
//targetStart默认为0,sourceStart默认为0,souceEnd默认为buf.length
buf4.copy(buf1);
console.log('拷贝自buf4的缓冲区内容:',buf1.toString());

//裁剪缓冲区,返回新的缓冲区,但裁剪区域与原缓冲区共用内存
//格式为buf.slice([start[, end]])
//负数索引从尾部算起
var sliceBuffer = buf4.slice(4);
console.log('剪切自buf4的缓冲区内容:',sliceBuffer.toString(),
          '字符长度为:',sliceBuffer.toString().length);
sliceBuffer.write('插',2);
console.log('修改sliceBuffer后buf4的内容:',buf4.toString());



var buf5 = new Buffer(7);
buf5.fill(98);
//写入无符号整数,大端对齐(最高48位)
//格式为buf.writeUIntBE(value, offset, byteLength[, noAssert])
//offset为buffer的偏移量,byteLength为从右算起写入的value字节数,noAssert默认为false
//noAssert为false时校验其它参数的有效性,此时byteLength必须等于value的字节长度
//且offset + byteLength <= buf.length;
//noAssert为true时,不校验参数的有效性;
buf5.writeUIntBE(0x1234567890ab,3,5,true);/*大端对齐依次写入34567890ab其中ab超出*/
console.log('大端对齐写入无符号整数',buf5);
buf5.fill(98);
//写入无符号整数,小端对齐(最高48位)
buf5.writeUIntLE(0x1234567890ab,3,5,true);/*小端对齐依次写入ab90785634其中34超出*/
console.log('小端对齐写入无符号整数',buf5);

buf5.writeUIntBE(300,3,4);
//读取无符号整数,大端对齐(最高48位)
//格式为buf.readUIntBE(offset, byteLength[, noAssert])
console.log('读取无符号整数内容(大端对齐):',buf5.readUIntBE(3,4));

buf5.writeUIntLE(300,3,4);
//读取无符号整数,小端对齐(最高48位)
console.log("读取无符号整数内容(小端对齐):",buf5.readUIntLE(3,4));


buf5.fill(98);
//写入有符号整数,大端对齐(最高48位)
buf5.writeIntBE(10,0,4);/*noAssert默认为false*/
//读取有符号整数,大端对齐(最高48位)
console.log('读取有符号整数内容(大端对齐):',buf5.readIntBE(0,4));/*noAssert为false*/
//写入有符号整数,小端对齐(最高48位)
buf5.writeIntLE(10,0,4);
//读取有符号整数,小端对齐(最高48位)
console.log("读取有符号整数内容(小端对齐):",buf5.readIntLE(0,4));


var fixBitNumber = new Buffer(65);
fixBitNumber.fill(0x62);
//写入8bit的无符号整数
//格式为buf.writeUInt8(value, offset[, noAssert])
fixBitNumber.writeUInt8(255,0);
//读取8bit的无符号整数
console.log('8bit的无符号整数:',fixBitNumber.readUInt8(0));

//写入16bit的无符号整数,大端对齐
//格式为buf.writeUInt16BE(value, offset[, noAssert])
fixBitNumber.writeUInt16BE(255,3);
//读取16bit的无符号整数
console.log('16bit的无符号整数(大端对齐):',fixBitNumber.readUInt16BE(3));

//写入16bit的无符号整数,小端对齐
//格式为buf.writeUInt16LE(value, offset[, noAssert])
fixBitNumber.writeUInt16LE(255,3);
//读取16bit的无符号整数
console.log('16bit的无符号整数(小端对齐):',fixBitNumber.readUInt16LE(3));


//写入32bit的无符号整数,大端对齐
//格式为buf.writeUInt32BE(value, offset[, noAssert])
fixBitNumber.writeUInt32BE(255,3);
//读取32bit的无符号整数
console.log('32bit的无符号整数(大端对齐):',fixBitNumber.readUInt32BE(3));
//写入32bit的无符号整数,小端对齐
//格式为buf.writeUInt32LE(value, offset[, noAssert])
fixBitNumber.writeUInt32LE(255,3);
//读取32bit的无符号整数
console.log('32bit的无符号整数(小端对齐):',fixBitNumber.readUInt32LE(3));



fixBitNumber.fill(0x62);
//写入8bit的有符号整数
//格式为buf.writeInt8(value, offset[, noAssert])
fixBitNumber.writeInt8(-128,0);
//读取8bit的有符号整数
console.log('8bit的有符号整数:',fixBitNumber.readInt8(0));

//写入16bit的有符号整数,大端对齐
//格式为buf.writeInt16BE(value, offset[, noAssert])
fixBitNumber.writeInt16BE(-255,3);
//读取16bit的有符号整数
console.log('16bit的有符号整数(大端对齐):',fixBitNumber.readInt16BE(3));

//写入16bit的有符号整数,小端对齐
//格式为buf.writeInt16LE(value, offset[, noAssert])
fixBitNumber.writeInt16LE(-255,3);
//读取16bit的有符号整数
console.log('16bit的有符号整数(小端对齐):',fixBitNumber.readInt16LE(3));


//写入32bit的有符号整数,大端对齐
//格式为buf.writeInt32BE(value, offset[, noAssert])
fixBitNumber.writeInt32BE(-255,3);
//读取32bit的有符号整数
console.log('32bit的有符号整数(大端对齐):',fixBitNumber.readInt32BE(3));
//写入32bit的有符号整数,小端对齐
//格式为buf.writeInt32LE(value, offset[, noAssert])
fixBitNumber.writeInt32LE(-255,3);
//读取32bit的有符号整数
console.log('32bit的有符号整数(小端对齐):',fixBitNumber.readInt32LE(3));

//32bit浮点数
fixBitNumber.writeFloatBE(30.25,1);
console.log('双浮点数大端对齐:',fixBitNumber.readFloatBE(1));
fixBitNumber.writeFloatLE(-30.25,2);
console.log('双浮点数小端对齐:',fixBitNumber.readFloatLE(2));

//64bit双精度
fixBitNumber.writeDoubleBE(64.125,1);
console.log('双精度数大端对齐:',fixBitNumber.readDoubleBE(1));
fixBitNumber.writeDoubleLE(-64.125,1);
console.log('双精度数小端对齐:',fixBitNumber.readDoubleLE(1));


 运行结果如下:

>node Buffer.js
合并的内容: <Buffer aa aa ff 00 61 9e>
限制合并总字节数的合并内容: <Buffer aa aa ff 00>
buf4创建的缓冲区的字节长度: 15
buf4创建的缓冲区内容: 缓冲区内容
读取buf4部分内容: 冲�� 读取的内容的字符长度为: 3
写入缓冲区buf4字节数: 15
写入后buf4缓冲区内容: 这里是重写
buf2[2]: 97
buf2: <Buffer ff 00 62 9e>
填充后的缓冲区为: aaaaaaaaaa
buf4的字节数组表达方式转化为json后: { type: 'Buffer',
  data: [ 232, 191, 153, 233, 135, 140, 230, 152, 175, 233, 135, 141, 229, 134,
153 ] }
比较后返回的数字: -1
是否相等: true
拷贝自buf4的缓冲区内容: 这里是�
剪切自buf4的缓冲区内容: ��是重写 字符长度为: 5
修改sliceBuffer后buf4的内容: 这里插重写
大端对齐写入无符号整数 <Buffer 62 62 62 34 56 78 90>
小端对齐写入无符号整数 <Buffer 62 62 62 ab 90 78 56>
读取无符号整数内容(大端对齐): 300
读取无符号整数内容(小端对齐): 300
读取有符号整数内容(大端对齐): 10
读取有符号整数内容(小端对齐): 10
8bit的无符号整数: 255
16bit的无符号整数(大端对齐): 255
16bit的无符号整数(小端对齐): 255
32bit的无符号整数(大端对齐): 255
32bit的无符号整数(小端对齐): 255
8bit的有符号整数: -128
16bit的有符号整数(大端对齐): -255
16bit的有符号整数(小端对齐): -255
32bit的有符号整数(大端对齐): -255
32bit的有符号整数(小端对齐): -255
双浮点数大端对齐: 30.25
双浮点数小端对齐: -30.25
双精度数大端对齐: 64.125
双精度数小端对齐: -64.125

 

分享到:
评论

相关推荐

    Buffer.zip_buffer

    总的来说,Buffer.zip_buffer是一个实现了跨平台缓冲区操作的库,它在Buffer.cpp和Buffer.h中定义了缓冲区的创建、管理和数据交换的函数。这个库对于需要高效、可靠地处理大量数据的软件项目来说非常有用,无论是在...

    java生成线缓冲区的代码

    System.out.println("Buffered LineString: " + buffer.toText()); } catch (ParseException e) { e.printStackTrace(); } } } ``` 在这个例子中,我们首先导入了必要的JTS库,然后创建了一个`WKTReader`对象...

    linux_buffer_module.rar_buffer缓冲

    在Linux系统中,缓冲区(Buffer)是一种重要的数据管理机制,尤其在嵌入式系统和多线程编程中,它能有效地提升系统性能并优化资源的利用率。标题“linux_buffer_module.rar_buffer缓冲”指的是Linux内核中的缓冲区...

    GEE训练教程-单个矢量的缓冲区(buffer)和矢量集合的缓冲区的构建.pdf

    在Google Earth Engine (GEE) 中,可以使用ee.Algorithms.Buffer()方法来实现单个矢量的缓冲区构建,使用ee.FeatureCollection().map()方法来实现矢量集合的缓冲区构建。 以下是具体的步骤: 单个矢量的缓冲区构建...

    buffer应用缓冲区

    在计算机科学领域,Buffer(缓冲区)是一种重要的概念,它在数据处理中起着至关重要的作用。Buffer的应用广泛,特别是在网络编程,尤其是Socket编程中,它扮演着数据传输的桥梁角色。本文将深入探讨Buffer的基本原理...

    22. USART_CircleBuffer 串口接收环形缓冲区

    本文将深入探讨如何使用环形缓冲区(Circle Buffer)技术优化STM32的串口接收功能。 串口通信,全称通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),是一种简单但实用的串行通信协议,...

    supermap 缓冲区分析 Buffer_Query

    SuperMap作为一款强大的GIS软件,提供了“缓冲区分析”功能,即“Buffer_Query”对象,用于创建围绕特定地理特征的区域,这些区域的大小与特征的距离有关。在本篇文章中,我们将深入探讨SuperMap中的缓冲区分析及其...

    pb_buffer.rar_buffer

    在这个场景中,"pb_buffer.rar_buffer" 提到的 pb_buffer 可能是一个特定的缓冲区实现,用于处理特定的数据格式或协议。 在 pb_buffer.c 文件中,我们可以预期找到 C 语言编写的源代码,它可能定义了一个名为 pb_...

    Buffer_Query.zip_C#缓冲区_点线面缓冲区_线缓冲区_缓冲区_面 缓冲区

    在C#中,我们需要先创建一个点对象,然后使用IGeometry.Buffer方法生成缓冲区。这通常涉及到坐标系统的转换和单位的统一。 2. **线缓冲区**:线缓冲区是由线对象两侧向外扩展的带状区域。这可能产生复杂的多边形...

    Node.js-buf-compare-Node.js0.12Buffer.compare()ponyfill

    `Buffer.compare()`方法的主要功能是返回一个整数值,表示两个缓冲区的相对顺序。如果第一个缓冲区在字节顺序上小于第二个,则返回负值;如果两者相等,则返回零;如果第一个缓冲区大于第二个,则返回正值。这个方法...

    Buffer_text.zip_buffer text_将数组存放BUFFER中

    6. **缓冲区拼接**:`Buffer.concat(list[, totalLength])`,将多个Buffer对象合并成一个新的Buffer。 7. **获取缓冲区长度**:`buffer.length`,返回Buffer对象的总长度。 在"将数组存放在BUFFER中"这个场景下,...

    Matlab.rar_buffer_buffer relay_delay system_relay_relay matlab

    1. 缓冲区理论:如何设计和管理多缓冲区系统以优化数据传输。 2. 继电器建模:如何在MATLAB中创建继电器的数学模型,模拟其开关特性。 3. 延迟系统分析:理解和处理由硬件、软件或通信链路引起的延迟。 4. Simulink...

    环形缓冲区_环形buffer_

    环形缓冲区(Ring Buffer)是一种在计算机编程中常见的数据结构,特别是在实时系统、嵌入式系统以及网络通信等领域有着广泛的应用。它是一种利用有限内存空间实现先进先出(FIFO,First In First Out)原则的数据...

    ringbuffer.zip

    在这个“ringbuffer.zip”压缩包中,包含了两个文件:`ringbuffer.c`和`ringbuffer.h`,它们分别代表了环形缓冲区的实现代码和头文件,通常用于C语言环境。 首先,`ringbuffer.h`是头文件,它定义了环形缓冲区的...

    CircleBuffer 环形缓冲区

    环形缓冲区(CircleBuffer),又称为循环缓冲区或环形队列,是一种高效的数据结构,常用于在多个线程间共享数据或者处理实时数据流。它的设计思想是利用一个固定大小的数组,通过两个指针(读指针和写指针)来追踪已...

    Boost.orgcircular_buffer模块.zip

    circular_buffer是Boost库中的一个数据结构,它是一个动态数组,其特点是可以在两端进行插入和删除操作,当缓冲区满时,新元素会替换旧元素,形成一种循环更新的效果。 二、circular_buffer的特性 1. 固定大小:...

    安全缓冲区:更安全的Node.js缓冲区API

    安全缓冲区更安全的Node.js缓冲区API 在所有版本的Node.js中使用新的Node.js缓冲区API( Buffer.from , Buffer.alloc , Buffer.allocUnsafe , Buffer.allocUnsafeSlow )。 在可用时使用内置实现。安装npm ...

    有关缓冲区溢出攻击的代码

    printf("缓冲区字符为=%s",buffer); } void fun1(){ printf("Call fun1"); while(1){ printf("liulele"); } } int main( ){ char a[100]; printf("Address of fun1=%p\n",fun1);//打印存储用于攻击的可用...

    环形缓冲区建立源码下载

    在Buffer.h中,可能定义了环形缓冲区的数据结构(如`struct Buffer`),以及相关的操作函数原型,如`init_buffer`用于初始化缓冲区,`write_to_buffer`用于向缓冲区写入数据,`read_from_buffer`用于从缓冲区读取...

    一个封装好的C++环形缓冲区

    环形缓冲区(Circular Buffer),又称循环队列,是一种数据结构,通常用于实现高效的缓存机制。它在一个固定大小的数组中进行操作,当缓冲区满时,新的元素会覆盖最旧的元素,而不是像传统缓冲区那样等待空间释放。...

Global site tag (gtag.js) - Google Analytics