node的基础学习笔记
以下是学习node的笔记
一、buffer缓冲区
如何理解buffer?
buffer 是个缓冲区,可以理解成是一个数组,但是js中的数组只能保存str,number,obj等数据类型,但是node.js是能作为服务器的语言,还要传输图片音乐视频等格式,这些文件都是二进制,用数组很明显是实现不了的,因此要使用buffer
buffer是底层语言它能直接在硬盘上开辟内存空间
1.buffer的开辟空间API
Buffer.alloc(size)能开辟一个安全的内存空间,需要清除原有数据
Buffer.allocUnsafe(size)能开辟一个不安全的内存空间但是效率高,不需要清除原有数据
二、node的同步文件写入
首先要知道什么是fs,它是file system的简写,fs是node的核心函数,直接可以引入不需要npm 下载
用node写文件和人工手动写文件是一样的步骤: 打开文件-向文件中写入内容-保存并关闭文件
1.打开文件
fs.opensync (path,flags[,mode])
-path要打开文件的路径
-flags打开文件要微的操作的类型
r只读的
w可写的
-mode设置文件的领作权限,一靓不传
返回值
-该方法会返回一个文件的描述符作为达果,费们可以通过该描述符来对文件进行各种c操作
2.向文件中写入内容
fs.writesync(fd,string[,position(,encoding]])
-fd文件的描述符,需要传递要可入的文件的描述符
-string要写入的内容
-position写入的起始位置
-encoding可入的编码,默以utf-8
3.保存并关闭文件
fs.closesyne(fd)
-td要夫闭的文件的描述符
代码如下:
var fs require("fs");
//打开文件
var fd = fs.opensync("hello.txt","w");
//向文件中写入内容
fs,writesync(fd,"今天天气真不错w",2):
//关闭文样
fs.closesync(fd);
三、node的异步文件写入
异步文件写入需要open方法:
fs.open(path[, flags[, mode]], callback)
官方中文文档:
上代码:
//打开文件
fs.open("hello2.txt", "w", function(err, fd) {
//判断是否出错
if (!err) {
//如果没有出错,工则对文件进行写入操作
fs.write(Ed, "这是异步写入的内容", function(err) {
if (!err) {
console.log("写入成功~~");
}
//关闭文件
fs.close(fd, function(err) {
if (!err) {
console.log("文件已关闭~~~");
}
});
});
} else {
console.log(err);
}
});
console.log("程序向下执行~~~");
四、node的简单文件写入
异步写法
fs.writeFile(file,data,[options],callback)
-file要操作的文件的路径
-data要写入的数据
-options进项,可以对写入进行一些设置I
-callback当写入完成以后执行的函数
//引入fs模块
var fs require("fs");
fs.writeFile("hello3.txt","这是通过writeFile写入的内容",function(err){
if(!err){
console.log("写入成功~~~");
});
同步写法
fs.writerilesync(file,data[,options])
-file要操作的文件的路径
-data要写入的数据
-options进项,可以对写入进行一些设置I
-callback当写入完成以后执行的函数
五、node的流式文件写入
当我们要写入的文件是个视频或者比较大内存的文件时,就不能一次写入,需要想抽水一样用一根水管,一点一点的流水式的写入
此时需要的api是fs.createWriteStream(path,options)
官方api解释 :http://nodejs.cn/api/fs.html#filehandlecreatewritestreamoptions
fs.createWriteStream(path,options)该方法用于创建一个可写流
-path 文件路径
-options 配置的参数(一般可以不写)
例子:
var ws = fs.createWriteStream("hello.txt"); //插入水管
ws.write("通过可写流写入文件的内容"); //写入文件也可以理解为开始流水
// 此时要通过监听流的open和close事件来监听流的打开和关闭
ws.once("open", function () {
//once用来绑定一次性事件
console.log("流打开了~~~~");
});
//关闭流
ws.end(); //注意此时不能用close()因为这事关闭被写入的一端
六、node的文件四种读取方式
1.同步文件读取
官方文档:http://nodejs.cn/api/fs.html#fsreadsyncfd-buffer-options
2.异步文件读取
3.简单文件读取
直接上代码
fs.readFile("hello.txt", function (err, data) { //此方法如果文件过大,风险较大
if (!err) {
console.log(data.toString());
}
});
4.流式文件读取
直接上代码
比较low的流式文件写入及读取
var fs require("fs");
//创建一个可读流
var rs = fs.createReadstream("C:/Users/lilichao/Desktop/.mp3");
//创建一个可写流
var ws = fs.createwritestrear()stream("a.mp3");
//监听流的开启和关闭
rs.once ("open",function ()
con8o1e.1og("可读流打开了~~~");
});
rs.once ("close",function (
conso1e.1og("可读流关闭了~~");
//数据读取完毕,关闭可写流
ws.end ()
});
ws.once ("open",function ()
conso1e.1og("可写流打开了~~");
})
ws.once ("close",function ()
conso1e.1og("可写引流关闭了~~");
});
//如果要读取一个可读流中的数据,必须要为可读流绑定一个data事件,data事件绑定完毕,它会自动开始读取数据
rs.on("data",function (data){
console.log(data);
//将读取到的数据写到可写流中
ws.write(data)
});
若使用pipe()函数可以大大缩减流式读取及写入的代码量
var fs require("fs");
//创建一个可读流
var rs fs.createReadstream("C:/Users/lilichao/Desktop/.mp3");
//创建一个可写流
var ws fs.createwritestream("b.mp3");
//pipe()可以将可读流中的内容,直接输出到可写流中
rs.pipe (ws);
七、node中fs(文件系统)的其他方法
1.检查一个文件是否存在fs.existssync(path)
fs.existssync(path) --检查一个文件是否存在
var isExists = fs.existssync ("a.mp3");
console.log(isExists);
2.获取文件的状态fs.stat(path,callback)
同步的方法: fs.stat(path,callback)
异步的方法: fs.statsync(path)
获取文件的状态