Buffer对象的总结
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对象的总结的更多相关文章
- 箭头函数和Buffer对象
一.箭头函数 普通函数1 var add = function (a, b) { return a + b; } 普通函数2 function add (a, b) { return a + b; } ...
- nodeJS之二进制buffer对象
前面的话 在ES6引入TypedArray之前,JavaScript语言没有读取或操作二进制数据流的机制.Buffer类被引入作为Nodejs的API的一部分,使其可以在TCP流和文件系统操作等场景中 ...
- 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度
我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...
- 简化连接Buffer对象的过程
上述一大段代码仅只完成了一件事情,就是连接多个Buffer对象,而这种场景需求将会在多个地方发生,所以,采用一种更优雅的方式来完成该过程是必要的.笔者基于以上的代码封装出一个bufferhelper模 ...
- NIO编程中buffer对象的理解以及API的使用
概念讲解,转自https://www.cnblogs.com/lxzh/archive/2013/05/10/3071680.html ,将的非常好! Buffer 类是 java.nio 的构造基 ...
- Buffer对象与JSON对象相互转换
> buffer=new Buffer('换汤不换药');<Buffer e6 88 91 e7 88 b1 e4 bd a0 ef bc 8c e7 89 a9 e7 90 86> ...
- node种buffer对象数组 深拷贝浅拷贝问题
node的一个上位机和下位机通信的转发程序,用的是udp转发. 其中在发送的时候会进行一次rc4加密数据 出现问题就在这个加密数据这一块,因为这个是升级包广播发送.提前生成了升级用的广播报文,是一个b ...
- JAVA NIO Buffer
所谓的输入,输出,就是把数据移除或移入缓冲区. 硬件不能直接访问用户控件(JVM). 基于存储的硬件设备操控的是固定大小的数据块儿,用户请求的是任意大小的或非对齐的数据块儿. 虚拟内存:使用虚 ...
- Cesium原理篇:6 Renderer模块(1: Buffer)
刚刚结束完地球切片的渲染调度后,打算介绍一下目前大家都很关注的3D Tiles方面的内容,但发现要讲3D Tiles,或者充分理解它,需要对DataSource,Primitive要有基础,而这要求对 ...
随机推荐
- angularjs的Controller as
<html ng-app="notesApp"> <head><title>Notes App</title></head&g ...
- [Luogu 2169] 正则表达式
[Luogu 2169] 正则表达式 感谢 0xis 推题. 记忆中很久没有过一遍写过一题了- 别被题目名称蒙骗!这不是正则表达式题目!和字符(串)处理一点关系都没有!这是个图论题啊喂! 题都没急,C ...
- LintCode 158: Anagram
LintCode 158: Anagram 题目描述 写出一个函数anagram(s, t)判断两个字符串是否可以通过改变字母的顺序变成一样的字符串. 样例 给出s = "abcd" ...
- 基本控件文档-UISlider属性
CHENYILONG Blog 基本控件文档-UISlider属性 Fullscreen UISlide属性技术博客http://www.cnblogs.com/ChenYilong/ 新浪微 ...
- 图片压缩之 PNG
作者:程志达链接:https://zhuanlan.zhihu.com/p/19570424来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. PNG(Portable N ...
- 简析CSRF
1.简介 CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF ...
- Meltdown论文翻译【转】
转自:http://www.wowotech.net/basic_subject/meltdown.html#6596 摘要(Abstract) The security of computer sy ...
- 【转】GridView 加载空行并点击编辑每一个单元格
代码 <script runat="server"> protectedvoid Button1_Click(object sender, System.EventAr ...
- python socket编程和黏包问题
一.基于TCP的socket tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端,有顺序,不重复,可靠.不会被加上数据边界. server端 import socket sk = so ...
- linux文件管理 -> 系统压缩打包
如果希望windows和Linux互相能使用的压缩工具, 建议.zip格式 压缩的好处主要有: 节省磁盘空间占用率 节省网络传输带宽消耗 网络传输更加快捷 Linux系统常见的后缀名所对应的压缩工具 ...