Node.js(六)【Buffer】【Stream】

Net Buffer Stream

 1  new Buffer(‘Hello 皮卡丘‘)
 2 //<Buffer 48 65 6c 6c 6f 20 e7 9a ae e5 8d a1 e4 b8 98>
 3
 4 new Buffer(‘Hello 皮卡丘‘, ‘base64‘)
 5 //<Buffer 1d e9 65 a1 af>
 6
 7 var buf = new Buffer(‘123456‘);console.log(buf)
 8 //undefined
 9
10 var buf = new Buffer(7);buf.write(‘12345678‘);console.log(buf.length)
11 //7, 超出部分会被忽略掉
12
13  var buf = new Buffer([1,2,3,4]);console.log(buf)
14 //<Buffer 01 02 03 04>

Buffer 用于处理二进制数据
一开始长度被指定了,无论怎么打,长度都不会变

 1 var fs = require(‘fs‘);
 2
 3 fs.readFile(‘imooc_class.jpg‘, function (err, origin_buffer) {
 4     console.log(Buffer.isBuffer(origin_buffer));
 5
 6     fs.writeFile(‘imooc_buffer.jpg‘, origin_buffer, function (err) {
 7         if(err) console.log(err);
 8     });
 9
10     var base64Image = origin_buffer.toString(‘base64‘);
11     console.log(base64Image);
12
13     var decodedImage = new Buffer(base64Image, ‘base64‘);
14     console.log(Buffer.compare(origin_buffer, decodedImage));
15
16     fs.writeFile(‘logo_decoded.jpg‘, decodedImage, function (err) {
17         if(err) console.log(err);
18     });
19 });

Stream流
/**********************************/

 1 var http = require(‘http‘);
 2 var fs = require(‘fs‘);
 3 var request = require(‘request‘);
 4
 5 http.createServer(function (req, res) {
 6     /*fs.readFile(‘imooc_class.jpg‘, function (err, res) {
 7         if(err) {
 8             res.end(‘file not exist!‘);
 9         }else {
10             res.writeHeader(200, {‘Content-Type‘: ‘text/html‘});,
11             res.end(data);
12         }
13     });*/
14
15     //fs.createReadStream(‘imooc_class.jpg‘).pipe(res);
16
17     //爬取网页图片,输出到指定端口
18     request(‘http://imgsrc.baidu.com/forum/w
19
20 %3D580/sign=e2f3b45fa086c91708035231f93c70c6/fb781bd5ad6eddc426e3e45c3edbb6fd53663399.jpg‘).pipe(res);
21 }).listen(8090);

/********************************************/

1 var fs = require(‘fs‘);
2
3 fs.createReadStream(‘1.mp3‘).pipe(fs.createWriteStream(‘1-pipe.mp3‘));

/********************************************/

 1 var stream = require(‘stream‘);
 2
 3 var Readable = stream.Readable;
 4 var Writable = stream.Writable;
 5
 6 //实例化
 7 var readStream = new Readable();
 8 var writStream = new Writable();
 9
10 //可读流
11 readStream.push(‘I ‘);
12 readStream.push(‘Love ‘);
13 readStream.push(‘Node\n‘);
14 //可读流结束
15 readStream.push(null);
16
17 //可写流
18 writStream._write = function (chunk, encode, cb) {
19     console.log(chunk.toString());
20     cb();
21 };
22
23 readStream.pipe(writStream);

/***************************************/

 1 //定制流
 2 var stream = require(‘stream‘);
 3 //工具类
 4 var util = require(‘util‘);
 5
 6 function ReadStream() {
 7     stream.Readable.call(this);
 8 }
 9
10 util.inherits(ReadStream, stream.Readable);
11
12 ReadStream.prototype._read = function () {
13     //可读流
14     this.push(‘I ‘);
15     this.push(‘Love ‘);
16     this.push(‘Node\n‘);
17     //可读流结束
18     this.push(null);
19 };
20
21 function WritStream() {
22     stream.Writable.call(this);
23     this._cached = new Buffer(‘‘);
24 }
25
26 util.inherits(WritStream, stream.Writable);
27
28 WritStream.prototype._write = function (chunk, encode, cb) {
29     console.log(chunk.toString());
30     cb();
31 };
32
33 //转换流
34 function TransformStream() {
35     stream.Transform.call(this);
36 }
37
38 util.inherits(TransformStream, stream.Transform);
39
40 TransformStream.prototype._transform = function (chunk, encode, cb) {
41     this.push(chunk);
42     cb();
43 };
44
45 TransformStream.prototype._flush = function (cb) {
46     this.push(‘Oh Yeah‘);
47 };
48
49 var rs = new ReadStream();
50 var ws = new WritStream();
51 var ts = new TransformStream();
52
53 rs.pipe(ts).pipe(ws);
时间: 2024-08-28 19:29:27

Node.js(六)【Buffer】【Stream】的相关文章

笔记:Node.js 的 Buffer 缓冲区

笔记:Node.js 的 Buffer 缓冲区 node.js 6.0 之前创建的 Buffer 对象使用 new Buffer() 构造函数来创建对象实例,但权限很大,可以获得敏感信息,所以建议使用 buffer.from() 接口创建 Buffer 对象. Buffer 实例要以通过显式字符编码与普通的字符串之间进行相互转换,支持 assii,utf8,utf16le,ucs2-utf16le,base64,latin1,binary-latin1,hex. 写稿缓冲区(buf.write)

Node.js开发入门—Stream用法详解

Stream是Node.js中非常重要的一个模块,应用广泛.一个流是一个具备了可读.可写或既可读又可写能力的接口,通过这些接口,我们可以和磁盘文件.套接字.HTTP请求来交互,实现数据从一个地方流动到另一个地方的功能. 所有的流都实现了EventEmitter的接口,具备事件能力,通过发射事件来反馈流的状态.比如有错误发生时会发射"error"事件,有数据可被读取时发射"data"事件.这样我们就可以注册监听器来处理某个事件,达到我们的目的. Node.js定义了R

【node.js】Buffer(缓冲区)

Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区. 创建 Buffer 类 Node Buffer 类可以通过多种方式来创建. 1.创建长度为 10 字节的 Buffer 实例: var buf = new Buffer(10); 2.通过给定的数组创建 Buffer 实例: var buf = new Buffer([10, 20, 30, 40, 50]); 3.通过一个字符串来创建 Buffer 实例: var buf = new Buffer("

Node.js的Buffer那些你可能不知道的用法

在大多数介绍Buffer的文章中,主要是围绕数据拼接和内存分配这两方面的.比如我们使用fs模块来读取文件内容的时候,返回的就是一个Buffer: fs.readFile('filename', function (err, buf) { // <Buffer 2f 2a 2a 0a 20 2a 20 53 75 ... > }); 在使用net或http模块来接收网络数据时,data事件的参数也是一个Buffer,这时我们还需要使用Buffer.concat()来做数据拼接: var bufs

Node.js API —— Buffer(缓冲区)

// 说明 Node API 版本为 v0.10.31.    中文参考:http://nodeapi.ucdok.com/#/api/,http://blog.sina.com.cn/oleoneoy 本段为博主注解. 目录 ● 缓冲区    ○ Class: Buffer ■ new Buffer(size)       ■ new Buffer(array)       ■ new Buffer(str, [encoding])       ■ Class Method: Buffer.i

node.js中buffer需要知道的一些点

本文为阅读朴灵大大的<深入浅出node.js>笔记: 在前端开发的时候,我们不曾用过buffer,也没得用.buffer是node环境引入的,用来方便应对二进制数据的处理.这里我们对它应该有基础的理解和正确的定位,方能更好的使用它. 1.buffer不属于v8包含的内容 buffer是node通过c++实现的,跟其他的一些核心模块类似,并不是说修改v8使,在v8中实现这个功能. 2.buffer不需要require 我们在使用例如文件模块等等的模块都需要require来引入对应的模块,但buf

Node.js之Buffer

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型.但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库,一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存. 创建 Buffer 对象(3种方式) var buf = n

node.js中Buffer缓冲器的使用

一.什么是Buffer Buffer缓冲器是用来存储输入和输出数据的一段内存.js语言没有二进制数据类型,在处理TCP和文件流的时候,就不是很方便了. 所以node.js提供了Buffer类来处理二进制数据,Buffer类是一个全局变量,Buffer在创建的时候大小就固定了,无法改变. Buffer类的实例类似于由字节元素组成的数组,可以有效的表示二进制数据. 二.什么是字节 字节是计算机存储时的一种计量单位,一个字节等于8个位.一个位就代表0或1,每8个位(bit)组成一个字节(byte).

Node.js(六)——HTTP概念进阶

在上面的步骤中扫通了http请求到结束的一个闭环包括请求时的头信息.响应时候服务器返回的头信息,状态码等等 这些在Node http模块中都能获取到并且有相应的接口去组装这些信息和返回它们,同时呢这些http接口在设计的时候就考虑了可以支持许多可以支持http协议的特性 而这些特性在传统的开发中却很难使用,比如大字节的块编码消息 为了让用户在请求和响应的时候使用流的形式操作数据接口缓存整个请求或者响应,整套http api都很底层,它只处理流之间的操作以及信息解析 可以把信息解析为请求头和请求体

node.js的Buffer类

1.创建 创建一个长度为256的Buffer实例:var buf = new Buffer(256); 创建一个数组:var buf = new Buffer([10, 20, 30, 40, 50]); 创建一个字符串:var buf = new Buffer("12345", "utf-8");utf-8为编码方式,还有"ascii", "utf8", "utf16le", "ucs2&quo