Buffer对象的总结

1.首先记录下php关于字符串长度的统计

<?php
echo strlen(‘0123456789‘);//10
echo ‘<br>‘;
echo strlen(‘一二三四五六七八九十‘);//30
echo ‘<br>‘;
echo mb_strlen(‘一二三四五六七八九十‘,‘utf-8‘);//10

2.Buffer对象为16进制的两位数,即FF 0-225;

var str=‘王炜‘;
var buf=new Buffer(str,‘utf-8‘);
console.log(buf);//<Buffer e7 8e 8b e7 82 9c>
var str=‘hello,王炜‘;
var buf=new Buffer(str,‘utf-8‘);
console.log(buf);//<Buffer 68 65 6c 6c 6f 2c e7 8e 8b e7 82 9c>

可以看出中文utf-8占3个元素,字母和半角符号均占1个元素



3.BUffer可以调用length方法,获取长度,也可以下标获取,每个元素都是0-225之间的随机数

var buf=new Buffer(10);//生成长度为10的buffer
buf[1]=22.23;
console.log(buf[1]);//22 如果是小数或舍弃小数部分
var buf=new Buffer(10);//生成长度为10的buffer
console.log(buf.length);//10
console.log(buf[8])//0  默认都是0
buf[1]=257;
console.log(buf[1])//0 大于等于256会在原数基础上减256
buf[2]=-1;
console.log(buf[2])//如果小于0 会在原数基础上加256


4. Buffer()对象以8kb来界定一个对象是大对象还是小对象

5.BUffer()目前支持的字符串转换 ASCII UTF-8 UTF-16LE/UCS-2 Base64 Binary Hex

new Buffer(str,[encoding]) 默认为UTF-8

buf.write(string,[offset],[length],[encoding])每一个单元可以写入指定的编码 

buf.toString([encoding],[start],[end])将buffer转换为指定的类型 可以设置转换范围

var buf=new Buffer(10);//生成长度为10的buffer
buf.write(‘王炜‘,‘utf-8‘);
console.log(buf)//<Buffer e7 8e 8b e7 82 9c 00 00 00 00> 汉字以utf-8写入buf
console.log(buf.toString(‘hex‘))//e78e8be7829c00000000 buf以‘hex‘格式转为字符串
var buf1=new Buffer(10);
//字符串以‘hex‘写入buf1再以utf-8转为字符串
buf1.write(buf.toString(‘hex‘),‘hex‘)
console.log(buf1.toString(‘utf-8‘));//王炜 


 6.Buffer.isEncoding(encoding)判断buffer是否支持该字符编码

 当然,不支持的可以采用iconv(c++写的)和iconv-lite(采用js编写,性能好一点)模块转换

console.log(Buffer.isEncoding(‘utf-8‘))//true
console.log(Buffer.isEncoding(‘hex‘))//true
console.log(Buffer.isEncoding(‘GBK‘))//false

关于iconv-lite

const iconv=require(‘iconv-lite‘);
var buf=new Buffer(‘我是王炜‘,‘utf-8‘);
var str=iconv.decode(buf,‘GBK‘);//buffer转换为gbk
console.log(str)//鎴戞槸鐜嬬倻
var str1=iconv.decode(buf,‘utf-8‘);//buffer转换为utf-8
console.log(str1)//我是王炜

var buf2=iconv.encode(str1,‘utf-8‘);//utf-8转buffer
console.log(buf2);//<Buffer e6 88 91 e6 98 af e7 8e 8b e7 82 9c>
console.log(buf2.toString())//我是王炜

时间: 2024-11-04 16:02:49

Buffer对象的总结的相关文章

箭头函数和Buffer对象

一.箭头函数 普通函数1 var add = function (a, b) { return a + b; } 普通函数2 function add (a, b) { return a + b; } 箭头函数 var add = (a, b) => a + b; 如果函数内部只有一句返回值,连return都不用写了,如果里面执行的语句比较多,就用{ }括起来 var add = (a, b)=> { console.log("这是箭头函数"); return a + b;

简化连接Buffer对象的过程

上述一大段代码仅只完成了一件事情,就是连接多个Buffer对象,而这种场景需求将会在多个地方发生,所以,采用一种更优雅的方式来完成该过程是必要的.笔者基于以上的代码封装出一个bufferhelper模块,用于更简洁地处理Buffer对象.可以通过NPM进行安装: npm install bufferhelper 下面的例子演示了如何调用这个模块.与传统data += trunk之间只是bufferHelper.concat(chunk)的差别,既避免了错误的出现,又使得代码可以得到简化而有效地编

nodeJS之二进制buffer对象

前面的话 在ES6引入TypedArray之前,JavaScript语言没有读取或操作二进制数据流的机制.Buffer类被引入作为Nodejs的API的一部分,使其可以在TCP流和文件系统操作等场景中处理二进制数据流.现在TypedArray已经被添加进ES6中,Buffer类以一种更优与更适合Node.js用例的方式实现了Uint8Array.本文将详细介绍buffer对象 概述 由于应用场景不同,在Node中,应用需要处理网络协议.操作数据库.处理图片.接收上传文件等,在网络流和文件的操作中

Java NIO中的缓冲区Buffer(一)缓冲区基础

什么是缓冲区(Buffer) 定义 简单地说就是一块存储区域,哈哈哈,可能太简单了,或者可以换种说法,从代码的角度来讲(可以查看JDK中Buffer.ByteBuffer.DoubleBuffer等的源码),Buffer类内部其实就是一个基本数据类型的数组,以及对这个缓冲数组的各种操作: 常见的缓冲区如ByteBuffer.IntBuffer.DoubleBuffer...内部对应的数组依次是byte.int.double... 与通道的关系 在Java NIO中,缓冲区主要是跟通道(Chann

Java NIO (二) 缓冲区(Buffer)

缓冲区(Buffer):一个用于特定基本数据类型的容器,由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的Buffer 主要用于和NIO中的通道(Channel)进行交互, 数据从通道(Channel)读入缓冲区(Buffer)或者从缓冲区(Buffer)写入通道(Channel).如下,我画的一个简图,Chanenl直接和数据源或者目的位置接触,Buffer作为中介这,从一个Channel中读取数据,然后将数据写入另一个Channel中. Bu

Node.js权威指南 (5) - 使用Buffer类处理二进制数据

5.1 创建Buffer对象 / 705.2 字符串的长度与缓存区的长度 / 725.3 Buffer对象与字符串对象之间的相互转换 / 74 5.3.1 Buffer对象的toString方法 / 74 5.3.2 Buffer对象的write方法 / 75 5.3.3 StringDecoder对象 / 755.4 Buffer对象与数值对象之间的相互转换 / 775.5 Buffer对象与JSON对象之间的相互转换 / 795.6 复制缓存数据 / 805.7 Buffer类的类方法 /

Java NIO系列教程(三) Buffer

原文链接:http://ifeve.com/buffers/ 声明:Java NIO系列教材并非本人原创,只因阅读原文之后有感于文章之精妙,意欲与诸位共享,故而出此下策,忘原作者见谅.另附上原文地址. Java NIO的通道类似流,但又有些不同: Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问

深入浅出NodeJS——Buffer

Javascript对字符串处理十分友好,无论是宽字节还是单字节字符串,都被认为是一个字符串.Node中需要处理网络协议.操作数据库.处理图片.文件上传等,还需要处理大量二进制数据,自带的字符串远不能满足这些要求,因此Buffer应运而生. Buffer结构 Buffer是一个典型的Javascript和C++结合的模块,性能相关部分用C++实现,非性能相关部分用javascript实现. Node在进程启动时Buffer就已经加装进入内存,并将其放入全局对象,因此无需require Buffe

在NodeJS中玩转Protocol Buffer

Protocol Buffer入门教程 Protocol Buffer是个什么鬼 NodeJS开发者为何要跟Protocol Buffer打交道 在NodeJS中实践Protocol Buffer协议 选择支持protobuf的NodeJS第三方模块 一个栗子 书写proto文件 编译 proto 文件 编写 Writer 编写Reader 运行结果 再举一个栗子 编写proto 编写client 书写server 运行结果 其他高级特性 嵌套Message Import Message 总结一