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-elementUint32Array
with elements[1,2,3,4]
, not anUint32Array
with 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])#
str
String - string to encode.encoding
String - encoding to use, Optional.
Allocates a new buffer containing the given str
. encoding
defaults to 'utf8'
.
new Buffer(size)#
size
Number
Allocates a new buffer of size
octets.
new Buffer(array)#
array
Array
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 后缀的方法 ...
随机推荐
- python pil 安装
Ubuntu下 sudo pip install pil 安装PIL可能会出现问题,例如安装完成时显示JPEG support not available 或者 ZLIB (PNG/ZIP) supp ...
- Poj OpenJudge 1068 Parencodings
1.Link: http://poj.org/problem?id=1068 http://bailian.openjudge.cn/practice/1068 2.Content: Parencod ...
- Docker容器里时间与宿主机不同步
docker容器里时间设置: 第一种: Dockerfile文件中添加一行:RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime或者 第二种: ...
- TweenMax动画库学习(五)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- SQL行列转换:报表_公司采购表_每个公司各采购了些什么产品
有同学问了个比较典型行列转换的问题,想想,解答如下:数据库有一张表: 是个公司采购表,想转化成如下报表,显示每个公司各采购了些什么产品: 哪些公司采购哪些产品是不确定的,所以报表的列有哪几项是不确定的 ...
- phpcms v9 打开网站特别慢 增加数据库缓存方法
SET GLOBAL QUERY_CACHE_SIZE=80000000; 设置好查询缓存的大小就行了.比如设置个20MB.SET GLOBAL QUERY_CACHE_SIZE=20000000; ...
- 创建dataTable
public void createTable() { DataSet ds = new DataSet(); using (DataTable dt = new DataTable("st ...
- CentOS7安装性能监控系统
目录 系统描述. 开发环境. 开始之前. 安装influxdb数据库. 安装collectd 安装Grafana FAQ influxdb的web界面没反应. 系统描述 想打造 New ...
- php + mysql + sphinx 的全文检索(2)
简单 使用php api 去查询 sphinx 的索引数据 $sphinx = new SphinxClient(); $sphinx->SetServer ( ...
- PowerDesigner 非数值默认值时会自动增加单引单
在PowerDesigner中,如果默认值是非数值型的,那么 PowerDesigner 会默认加上单引号 因此我们需要把这个默认的单引号干掉,如果是需要设置字符串默认值的时候,就手工加上 单引号 即 ...