node.js模块之Buffer模块
http://nodejs.org/api/buffer.html
Pure JavaScript is Unicode friendly but not nice to binary data. When dealing with TCP streams or the file system, it's necessary to handle octet streams. Node has several strategies for manipulating, creating, and consuming octet streams.
Raw data is stored in instances of the Buffer class. A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized.
The Buffer class is a global, making it very rare that one would need to ever require('buffer').
Converting between Buffers and JavaScript string objects requires an explicit encoding method. Here are the different string encodings.
'asicc','binary'等。
Creating a typed array from a Buffer works with the following caveats:caveat:缺陷
The buffer's memory is copied, not shared.
The buffer's memory is interpreted as an array, not a byte array. That is,
new Uint32Array(new Buffer([1,2,3,4]))creates a 4-elementUint32Arraywith elements[1,2,3,4], not anUint32Arraywith a single element[0x1020304]or[0x4030201].
NOTE: Node.js v0.8 simply retained a reference to the buffer in array.buffer instead of cloning it.
While more efficient, it introduces subtle incompatibilities with the typed arrays specification.ArrayBuffer#slice() makes a copy of the slice while Buffer#slice() creates a view.
new Buffer(str, [encoding])#
strString - string to encode.encodingString - encoding to use, Optional.
Allocates a new buffer containing the given str. encoding defaults to 'utf8'.
new Buffer(size)#
sizeNumber
Allocates a new buffer of size octets.
new Buffer(array)#
arrayArray
Allocates a new buffer using an array of octets.
> new Buffer([255,0,149]);
<Buffer ff 00 95>
>
如例4-24 所示的例子,我们用字符串来创建Buffer,它默认是UTF-8 编码的。如
果你没有指定编码格式,它就会认为是UTF-8 字符串。这并不意味着Buffer 会
把字符串补全成能够存下任意Unicode 字符的大小(盲目地为每个字符分配4 个字
节),而是说明它不会截断字符内容。在这个例子中,我们看到当输入的字符串是小
写字母时,无论采用的是哪种编码方式,Buffer 都使用同样的字节结构,因为每
个字母都落在同样的区间里。但是,当我们输入“é”字符时,无论是默认的UTF-8
还是我们显式指定为UTF-8,它都被编码成2 个字节大小。但是当我们指定编码为
ASCII 时,字符被截断成单个字节。
你还可以往已经存在的Buffer 上写入字符串。Buffer.write() 会把字符串写到
Buffer 指定的位置上。如果从Buffer 指定位置开始有足够空间的话,整个字符串
都会被写入。否则,字符串的尾部会被截断,好让其大小能放入Buffer。在这两
种情况下,Buffer.write() 都会返回一个数字,表示有多少字节被成功写入。对
于UTF-8 字符串来说,如果一个完整字符无法写入到Buffer 的话,就不会单独写
入该字符的某个字节。如在例4-25 中,因为Buffer 太小了,以至于无法写入一个
非ASCII 字符,所以它就是空的。
你还可以往已经存在的Buffer 上写入字符串。Buffer.write() 会把字符串写到Buffer 指定的位置上。如果从Buffer 指定位置开始有足够空间的话,整个字符串都会被写入。否则,字符串的尾部会被截断,好让其大小能放入Buffer。在这两种情况下,Buffer.write() 都会返回一个数字,表示有多少字节被成功写入。对于UTF-8 字符串来说,如果一个完整字符无法写入到Buffer 的话,就不会单独写入该字符的某个字节。如在例4-25 中,因为Buffer 太小了,以至于无法写入一个非ASCII 字符,所以它就是空的。
node.js模块之Buffer模块的更多相关文章
- node.js中使用http模块创建服务器和客户端
node.js中的 http 模块提供了创建服务器和客户端的方法,http 全称是超文本传输协议,基于 tcp 之上,属于应用层协议. 一.创建http服务器 const http = require ...
- node.js(七) 子进程 child_process模块
众所周知node.js是基于单线程模型架构,这样的设计可以带来高效的CPU利用率,但是无法却利用多个核心的CPU,为了解决这个问题,node.js提供了child_process模块,通过多进程来实现 ...
- node.js第二天之模块
一.模块的定义 1.在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分. 2.狭义的说,每一个JavaScript文件都是一个 ...
- Node.js系列:Buffer类的使用
客户端JavaScript中没有对二进制数据提供很好的支持.但是在处理TCP流或文件流时,必须要处理二进制数据.Node.js定义了一个Buffer类,用来创建一个专门存放二进制数据的缓存区. Buf ...
- Node.js之使用Buffer类处理二进制数据
Node.js之使用Buffer类处理二进制数据 Buffer类可以在处理TCP流或文件流时处理二进制数据,该类用来创建一个专门存放二进制数据的缓存区. 1. 创建Buffer对象 1.1 直接创建: ...
- 学废了系列 - WebGL与Node.js中的Buffer
WebGL 和 Node.js 中都有 Buffer 的使用,简单对比记录一下两个完全不相干的领域中 Buffer 异同,加强记忆. Buffer 是用来存储二进制数据的「缓冲区」,其本身的定义和用途 ...
- 使用Node.js的socket.io模块开发实时web程序
首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统 ...
- 转 node.js里面的http模块深入理解
问题1:HTTP服务继承了TCP服务模型,是从connection为单位的服务到以request为单位的服务的封装,那么request事件何时触发? 注意:在开启keepalive后,一个TCP会话可 ...
- node.js中fs文件系统模块的使用
node.js中为我们提供了fs文件系统模块,实现对文件或目录的创建,修改和删除等操作. fs模块中,所有的方法分为同步和异步两种实现. 有 sync 后缀的方法为同步方法,没有 sync 后缀的方法 ...
随机推荐
- centos6.5安装配置zabbix3.0.3
1.首先要准备LAMP环境. (1)安装php Zabbix 3.0对PHP的要求最低为5.4,而CentOS6默认为5.3.3,完全不满足要求,故需要利用第三方源,将PHP升级到5.4以上 rpm ...
- js 的数据类型转换
一直对js的类型转换一直半解,今天理一下思路,首先说一下几个特殊的数值 null null是特殊的object,故 typeof null 返回object, null派生于undefined ,故 ...
- 彻底删除sql server的方法
请先确定是否把sql相关的东西删了,建议进行如下操作. 1.先下个Windows Install Clean Up,清理sql相关东西,要全部清理. 2.到控制面板--添加删除程序中看是否还有未删的. ...
- PHP将二进制文件存入数据库以及从数据库中读取二进制文件
<?php $file = 'abcd.sqlite'; mysql_connect('localhost','root','123456'); mysql_select_db('zblog') ...
- 内核升级修复nfs
Not starting NFS kernel daemon: no support in current kernel. sudo gedit /etc/init.d/nfs-kernel-serv ...
- Arcgis投影变换后图像变深的问题
首先投影时,重采样方式选择nearest最邻近采样法,不改变投影后图像的DN值。 然后双击投影后图像,在符号系统中选择RGB——拉伸类型改为:无(默认是标准差拉伸)
- 【socket】高级用法-异步
ReceiveAsync ReceiveFromAsync ReceiveMessageFromAsync
- poi导出到excel步骤分析
在没用过poi之前感觉poi是很高大上的样子, 项目中用了发现poi的代码重复性很高类似于jdbc的模板代码, 项目中如果大量使用最好封装起来; 总结一下归结为6步 1 打开或新创建一个工作薄(使用H ...
- Educational Codeforces Round 5 B
Problem B:http://codeforces.com/contest/616/problem/B B. Dinner with Emma 题意:一对夫妻要去餐厅吃晚饭,Emma 想去最豪华( ...
- Struts2自定义拦截器实例—登陆权限验证
版本:struts2.1.6 此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面. ...