全局对象:
console ;
__filename ;
__dirname ;
setTimeOut ;
setImmediate(把参数函数放在下一个环节执行)
process对象
cwd //当前工作目录 console.log(process.cwd());
chdir //修改当前工作目录 process.chdir('..') ; 切换到上一层目录
memoryUsage //内存使用量 process.memoryUsage(); {rss:常驻内存,heapTotal:堆的总内存,heapUsed:堆得已使用内存}
nextTick //放在当前任务的末尾
================================
util
1、inherits //原型继承,(ChildFun只继承ParentFun原型上的属性与方法) util.inherits(ChildFun,ParentFun); var child = new ChildFun()
2、inspect
//关于枚举隐藏与强制显示
var util = required(‘util’);
var obj = new Object();
obj.name = 'liujinyu'
Object.defineProperty(obj,'age',{
value:27,
configurable:true, //可配置 可删除
writable:true, //值可以改变
enumerable:false //不可枚举
})
console.log(util.inspect(obj),{
showHidden:true //{name:'liujinyu',[age]:27}
})
3、isArray ;
4、isRegExp;
5、isDate;
fs
var content = fs.readFileSync('../file.txt',{encoding:'utf8'}) //同步
fs.readFile('../file.txt',{encoding:'uft8'},(err,data)=>{console.log(data)}) //异步 【!所有异步要晚于同步,所有异步放在下一个清单】
======================================================
【流】
流的概念:流是一组【有序】的,有【起点】和【终点】的【字节数据传输】手段;
不关心文件整体内容,文件多大,只关心是否读到、以及读到后的操作处理
流是一个【抽象接口】,被node中很多对象所实现,比如对一个http服务器的请求对象request是一个流,stdout也是流。
stream.Readable可读流
fs.createReadStream('../file.txt',[opations]); //opactions: flags对文件何种操作,默认‘r’, encoding , start 开始读取字节读索引位置,
//end 结束索引, highWaterMark 最高水位线,却省64kb
1 var fs = require('fs'); 2 3 // 创建之后的流在准备好【接收】之前不会开始【发射】数据 4 var rs = fs.createReadStream('data/account_0.data',{//创建流 5 flage:'r',//打开文件之后想干什么 r只读操作 w写操作 6 // encoding:'utf8' //默认是buffer 7 start:10,//读取的字节索引的开始位置 8 end:30,//读取的字节索引的开始位置 9 highWaterMark:10//最高水位线,却省默认64kb,一次取多少1字节 10 }) 11 12 //可读流方法 13 rs.setEncoding('utf8');//可以在创建流之后制定编码 14 rs.pause();//通知对象 暂停 触发data事件 15 rs.resume();//通知对象 恢复 触发data事件 16 // rs.pipe();//设置【管道】,将可读流内容导入参数指定的【可写流】 17 18 // 流是EventEmitter的子类 19 // 下面是可读流触发的事件 用on来绑定 触发事件有 dataenderror 20 rs.on('data',function(resData){//绑定一个“data”事件监听器, 21 console.log(resData) //会将流切换到“流动模式”,数据被尽可能快读出 22 }) 23 rs.on('end',function(){//读完后触发 24 console.log('读完了') 25 }) 26 rs.on('error',function(err){//当数据接收错误时触发 27 console.log(err); 28 })
stream.writeStream可写流
var fs = require('fs'); //在fs模块中 用createWriteStream创建一个将流数据写入文件中的 WriteStream对象 var ws = fs.createWriteStream('data/my.data',{ flags:'a',//默认w r=read w=write a=append encoding:'utf8', // start:0,// 从第几个字节开始写入 highWaterMark:5 //却省16kb 设置缓存区大小 最高水位线设5字节 // 可以说是控制写入速度 大口大口喂 }) //可写流的方法 ws.write('1');//write写入缓存区 var flag = ws.write('23456');//flag,是否满足缓存区 highWaterMark 设置的大小 console.log(flag) ws.on('drain',function(){ console.log('drain') }) // 结束写入数据时触发。迫使缓存区中数据立即写入目标对象,调用后不能再写入 ws.end('man'); //向流入写入数据
【练习】利用流,做一个copy方法,复制文件 copy(file1,file2) copy:file1=>file2
【pipe】
var fs = require('fs'); //在fs模块中 用createWriteStream创建一个将流数据写入文件中的 WriteStream对象 function copy(file1,file2){ var rs = fs.createReadStream(file1); var ws = fs.createWriteStream(file2); rs.on('data',function(d){ var flag = ws.write(d); if(!flag){//当写不进去了 ws.pause();//暂停写入 } }) ws.on('drain',function(){//写入流 监听到写完 ws.resume(); //恢复写入 }) rs.on('end',function(){ ws.end();//当读完的时候也要关闭写入文件 }) } // copy('my.js','my1.js') // ------ 用 pipe 重写 copy (pipe的源码上面的function cope 一样)-------- // 将数据的【制留量】限制到一个可接受的水平,以使得不同速度的来源和目标不会【淹没】可用内存 function copy_pipe(file1,file2){ var rs = fs.createReadStream(file1); var ws = fs.createWriteStream(file2); rs.pipe(ws); } copy_pipe('my.js','my1.js')
============================================