Node.js入门笔记(3):全局对象(2)
buffer
用于更好操作二进制数据,他是一个全局变量。类似数组。
var a=new Buffer();
buffer类的三种实现
- 第一种创建方式 new Buffer(size);size[Number]
// new Buffer(size);size[Number]创建一个buffer对象,并分配大小
//当我们为一个buffer对象分配空间大小之后,长度不固定,不可更改
var bf=new Buffer(5);
//bf[6]=10是不可行的。
console.log(bf);
- 第二种 new Buffer(array);
var bf=new Buffer([1,2,3]);
console.log(bf);
bf[10]=10;//无效
console.log(bf);
- 第三种 new Buffer(string,[encoding])
var bf=new Buffer('dangjingtao','utf-8');
console.log(bf);
对应的编码就以UTF-8的个格式打印到了控制台。
var bf=new Buffer('dangjingtao','utf-8');
console.log(bf);
for (var i=0;i<bf.length;i++){
//console.log(bf[i].toString(16));//转16进制编码
console.log(String.fromCharCode(bf[i]));//转换为可见字符
}
注意:bf.length是字节长度而不是字符串长度
var str1='一二';
var bf1=new Buffer(str1);
console.log(str1.length);//输出2
console.log(bf1.length);//输出6,一个中文占据3个字节
buf.write
buf.write(字符串, 从buffer对象的第几位开始写入,长度, 编码格式)
根据参数 offset 偏移量和指定的encoding编码方式,将参数 string 数据写入buffer.
- 第一个参数是字符串,
var bf=new Buffer(5);
var str='djtao123'
bf.write(str)//只写入了字符串前5个数值,受到了长度的限制。
console.log(new Buffer(str));//不受限制
- 第二个参数是偏移量
var bf=new Buffer(5);
var str='djtao123'
bf.write(str,1)//向右偏移一位,也就是说从第1位而不是第0位开始算起:自动生成的code+‘djta’
console.log(bf);
- 第三个参数:截取的长度
var bf=new Buffer(5);
var str='djtao123';
bf.write(str,1,3)//向右偏移一位,截取三位
console.log(bf);//自动生成的code+’djt‘+自动生成的code。
var str2='';
for(var i=0;i<bf.length;i++){
str2+=String.fromCharCode(bf[i]);
}
console.log(str2);
- 第四个参数(可选):要写入字符串的编码
toString用法
var bf=new Buffer('djtao');
/*
var str=bf.toString()类似于:
var str='';
for(var i=0;i<bf.length;i++){
str+=String.fromCharCode(bf[i]);}
不同的是支持不太好。参见bf.length处的说明
而后面的两个参数又相当于substring方法,比如说:
console.log(bf.toString('utf-8',1,3));截取第1个字符串起,到第3个字符串之前的字符段
*/
console.log(bf.toString('utf-8',1,3));//输出jt
toJSON
就是以json的方式输出出来
var bf=new Buffer('djtao');
console.log(bf.toJSON())
输出如下:
slice
buf.slice([start], [end]) : 返回一个新的buffer,这个buffer将会和老的buffer引用相同的内存地址,注意:修改这个新的buffer实例slice切片,也会改变原来的buffer。跟字符串一样,只能重写。
var bf=new Buffer('djtao');
console.log(bf.slice(1,3));//截取输出第1位和第2位的字符串(jt)的编码
实现方式和字符串的slice方法极其类似。
copy
buf.copy(targetBuffer, 目标buffer起始位数, 拷贝对象的起始位数 拷贝对象的终止位数) : 进行buffer的拷贝
var bf=new Buffer('djtao');
var bf2=new Buffer(5);
bf.copy(bf2)//bf拷贝到bf2
console.log(bf2);
buffer的类方法(静态方法)
- Buffer.isEncoding(encoding) : 如果给定的编码 encoding 是有效的,返回 true,否则返回 false。
console.log(Buffer.isEncoding('utf-8'));//true
console.log(Buffer.isEncoding('gbk'));//false
console.log(Buffer.isEncoding('hex'));//true
- Buffer.isBuffer(obj) : 测试这个 obj 是否是一个 Buffer.
var arr=[];
Buffer.isBuffer(arr)//false
- Buffer.byteLength(string, [encoding]) : 将会返回这个字符串真实byte长度。 encoding 编码默认是: 'utf8'
var str='呵呵';
console.log(str.length);//2
console.log(Buffer.byteLength(str));//6
- Buffer.concat(list, [totalLength]) : 返回一个保存着将传入buffer数组中所有buffer对象拼接在一起的buffer对象.
list
{Array} 用来连接的数组
totalLength
{Number 类型} 数组里所有对象的总buffer大小(长度)
var bf1=new Buffer('djtao');
var bf2=new Buffer('tao');
var list=[bf1,bf2]
console.log(Buffer.concat(list));//返回拼接后的字节buffer:<Buffer 64 6a 74 61 6f 74 61 6f>
现在回到process的对象中来,看一个案例:
process.stdout.write('请输入内容:');
process.stdin.resume();//开启
process.stdin.on('data',function (chunk) {
console.log(chunk);
});
可见chunk实际上返回的是一个buffer对象。31表示1,0a表示回车
当你把字符串和chunk相连之后,会自动调用chunk.toString()方法。所以你在前面的例子看到chunk是一个字符串。而且看不到回车(换行)。
Node.js入门笔记(3):全局对象(2)的更多相关文章
- Node.js入门笔记(2):全局对象(1)
以下将以API文档为基础进行分析学习 global对象 这些对象在所有模块里都可用.有些对象不是在全局作用域而是在模块作用域里,这些情况下面文档都会标注出来. __filename--返回当前模块文件 ...
- Node.js入门笔记(1):基本概念
Node.js和JavaScript: 核心都是ECMAScrit,比如数据类型,语法结构,内置对象等等. 但是在js中顶层是window 在node中的不存在这个window(console.log ...
- Node.js入门笔记(6):web开发方法
使用node进行web开发 用户上网流程: 表面上看:打开浏览器--输入网址--跳转--上网. 背后的过程是什么呢? http请求网址到指定的主机--服务器接收请求--服务器响应内容到用户浏览器--浏 ...
- Node.js入门笔记(5):案例两则
案例分析:前端自动化 1. 实现一个自动创建前端项目文件的js 通过node.js自动创建前端项目目录,包括js目录,js目录css目录,index.html和对应的内容. 初步的代码如下: var ...
- Node.js入门笔记
第一步自然是安装了.我是用Webstorm这个ide,安装分2步: 1.安装nodejs,下载Windows下的安装版本号.注意是以msi为扩展名的,然后下一步.没啥好说的,下载地址例如以下: 32位 ...
- Node.js入门笔记(4):文件系统(fs)
文件系统(FileSystem) 文件系统模块 对于文件无外乎创建修改添加. File System - 文件系统模块 - require('fs') fs模块是核心模块,需要使用require导入后 ...
- Node.js 入门资料
小毛驴的阿凡提的 Node.js 入门笔记 http://www.cnblogs.com/Afanty/category/1007304.html
- 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...
- node.js系列笔记之node.js初识《一》
node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...
随机推荐
- send+recv注意事项
[TOC] send 函数原型 ssize_t send( SOCKET s, const char *buf, size_t len, int flags ) 注意事项 待发送数据长度data_le ...
- percona教程:MySQL GROUP_CONCAT的使用
percona有一篇blog: The power of MySQL GROUP_CONCAT 比较详细地介绍了GROUP_CONCAT函数的用法.简单地翻译了一下. 假设你有4名工程师,这周他们为6 ...
- LLVM 笔记(五)—— LLVM IR
ilocker:关注 Android 安全(新手) QQ: 2597294287 LLVM 的 IR (Intermediate Representation) 是其设计中的最重要的部分.优化器在进行 ...
- 【java开发】面向对象初步认识与基础概念讲解
简单的把前面的java基础知识讲了,接下来就开始面向对象的旅程了. 对象(Object):简而言之,世界是由对象组成的,一切可见的事物吧 类(class):说白了就是把具有相同的一些特征或是属性归为一 ...
- 解密H264、AAC硬件解码的关键扩展数据处理
通过上一篇文章,我们用ffmpeg分离出一个多媒体容器中的音视频数据,但是很可能这些数据是不能被正确解码的.为什么呢?因为在解码这些数据之前,需要对解码器做一些配置,典型的就是目前流行的高清编码“黄金 ...
- WinRAR的命令行模式用法介绍
因工作中要对数据打包,顺便研究了下WinRAR的命令行模式,自己写了些例子,基本用法如下: 测试压缩文件准备:文件夹test_data,内部包含子文件夹,分别存放了一些*.log和*.txt文件. 测 ...
- [转]什么鬼,又不知道怎么命名class了
(本文作者Mrcxt,原文链接:http://blog.csdn.net/mrcxt/article/details/52038884) 相信写css的人都会遇到下面的问题: 糟糕,怎么命名这个cla ...
- HDU 5183 Negative and Positive (NP) --Hashmap
题意:问有没有数对(i,j)(0<=i<=j<n),使得a[i]-a[i+1]+...+(-1)^(j-i)a[j]为K. 解法:两种方法,枚举起点或者枚举终点. 先保存前缀和:a1 ...
- 三维网格补洞算法(Poisson Method)
下面介绍一种基于Poisson方程的三角网格补洞方法.该算法首先需要根据孔洞边界生成一个初始化补洞网格,然后通过法向估算和Poisson方程来修正补洞网格中三角面片的几何形状,使其能够适应并与周围的原 ...
- HTML ------ 关于表单 Form
Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...