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

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

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);//
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())//我是王炜

Buffer对象的总结的更多相关文章

  1. 箭头函数和Buffer对象

    一.箭头函数 普通函数1 var add = function (a, b) { return a + b; } 普通函数2 function add (a, b) { return a + b; } ...

  2. nodeJS之二进制buffer对象

    前面的话 在ES6引入TypedArray之前,JavaScript语言没有读取或操作二进制数据流的机制.Buffer类被引入作为Nodejs的API的一部分,使其可以在TCP流和文件系统操作等场景中 ...

  3. 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度

    我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...

  4. 简化连接Buffer对象的过程

    上述一大段代码仅只完成了一件事情,就是连接多个Buffer对象,而这种场景需求将会在多个地方发生,所以,采用一种更优雅的方式来完成该过程是必要的.笔者基于以上的代码封装出一个bufferhelper模 ...

  5. NIO编程中buffer对象的理解以及API的使用

    概念讲解,转自https://www.cnblogs.com/lxzh/archive/2013/05/10/3071680.html  ,将的非常好! Buffer 类是 java.nio 的构造基 ...

  6. Buffer对象与JSON对象相互转换

    > buffer=new Buffer('换汤不换药');<Buffer e6 88 91 e7 88 b1 e4 bd a0 ef bc 8c e7 89 a9 e7 90 86> ...

  7. node种buffer对象数组 深拷贝浅拷贝问题

    node的一个上位机和下位机通信的转发程序,用的是udp转发. 其中在发送的时候会进行一次rc4加密数据 出现问题就在这个加密数据这一块,因为这个是升级包广播发送.提前生成了升级用的广播报文,是一个b ...

  8. JAVA NIO Buffer

    所谓的输入,输出,就是把数据移除或移入缓冲区.   硬件不能直接访问用户控件(JVM). 基于存储的硬件设备操控的是固定大小的数据块儿,用户请求的是任意大小的或非对齐的数据块儿.   虚拟内存:使用虚 ...

  9. Cesium原理篇:6 Renderer模块(1: Buffer)

    刚刚结束完地球切片的渲染调度后,打算介绍一下目前大家都很关注的3D Tiles方面的内容,但发现要讲3D Tiles,或者充分理解它,需要对DataSource,Primitive要有基础,而这要求对 ...

随机推荐

  1. layoutSubviews何时被调用

    layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubviews 但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时, ...

  2. 完美解决github访问速度慢

    1. 解决方法 2.解决方法 1. 修改本地hosts文件 windows系统的hosts文件的位置如下:C:\Windows\System32\drivers\etc\hosts mac/linux ...

  3. [转载]C语言程序的内存分配方式

    "声明一个数组时,编译器将根据声明所指定的元素数量为数量为数组保留内存空间."其实就是编译器在编译的过程中,会加入几条汇编指令在程序里处理内存分配,并不是说编译时就分配了内存,不要 ...

  4. 20155230 2016-2017-2《Java程序设计》第六周学习总结

    20155230 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象. 从应用程序角度 ...

  5. AutoCAD DevTV-AUTOCAD二次开发资源合集

    Webcast Language Date AutoCAD .Net - Session 2 English 13-Sep-12 AutoCAD .Net - Session 1 English 6- ...

  6. CSS line-height应用

    一.固定高度的容器,单行文本垂直居中 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf- ...

  7. 存储过程简单Demo

    --创建存储过程 delimiter // create procedure p1() begin end // --调用存储过程 call p1(); --删除存储过程 drop procedure ...

  8. 【Python项目】爬取新浪微博签到页

    基于微博签到页的微博爬虫 项目链接:https://github.com/RealIvyWong/WeiboCrawler/tree/master/WeiboLocationCrawler 1 实现功 ...

  9. MySQL分页存储过程

    CREATE PROCEDURE ProcPage(in tableName varchar(20),#表名  in showField varchar(100),#要显示的列名  in whereT ...

  10. vs2010,vs2012注释快捷键

    注释:VS2010是(Ctrl+E,C),VS2012是(Ctrl+K, Ctrl+C) 反注释:VS2010是(Ctrl+E,U),VS2012是(Ctrl+K, Ctrl+U)