Node里面的buffer,是一个二进制数据容器,数据结构类似与数组,专门用于Node中数据的存放
var buffer = new Buffer(10);
console.log(buffer); //<Buffer 00 00 00 00 00 00 00 00 00 00>
// 1. 字符串转成二进制
var str = "左眼会陪右眼哭";
var buffer = Buffer.from(str); //将一个字符串转换为buffer
console.log(buffer); //输出转为二进制之后的内容:<Buffer e5 b7 a6 e7 9c bc e4 bc 9a e9 99 aa e5 8f b3 e7 9c bc e5 93 ad>
console.log(buffer.length); //输出二进制转换后的长度:21
console.log(str.length); //输出字符串的长度:7
console.log(buffer.toString()); //将二进制转化为字符串:左眼会陪右眼哭
// 2. Buffer.alloc(size[, fill[, encoding]])
/*
初始化: 确定的长度
*/
let buffer2 = Buffer.alloc(20); //创建一个指定大小的Buffer,Buffer的结构和数组很像
buffer2[0] = 10;
buffer2[1] = 12;
buffer2[2] = 0xfc;
buffer2[19] = 11;
buffer2[20] = 11;
// console.log(buffer2);
buffer2.forEach((item, index) => {
console.log(index + ":" + item); //输出了二十个buffer对象
});
+ r 读取文件 , 文件不存在则出现异常 + r+ 读写文件 , 文件不存在则出现异常 + rs 在同步模式下打开文件用于读取 + rs+ 在同步模式下打开文件用于读写 + w 打开文件用于写操作 , 如果不存在则创建,如果存在则截断 + wx 打开文件用于写操作 , 如果 存在则打开失败 + w+ 打开文件用于读写 , 如果不存在则创建 , 如果存在则截断 + wx+ 打开文件用于读写 , 如果 存在则打开失败 + a 打开文件用于追加 , 如果不存在则创建 + ax 打开文件用于追加 , 如果路径存在则失败 + a+ 打开文件进行读取和追加 , 如果不存在则创建该文件 + ax+ 打开文件进行读取和追加 , 如果路径存在则失败 2. 关闭文件 fs.close(fd, callback) fs.closeSync(fd) ### fs中提供了四种不同的方式将数据写入文件 1. 简单文件写入 • fs.writeFile(file, data[, options], callback) • fs.writeFileSync(file, data[, options]) 参数: – file 文件路径 – data 被写入的内容,可以是String或Buffer – options 对象,包含属性(encoding、mode、flag) – callback 回调函数
简单写入
// 1. 引入模块
let fs = require("fs");
// 2. 打开文件
let fd = fs.openSync("fs2.txt", "w");
// 2.2 写入文件
fs.writeFileSync(fd, "我是用Node.js用文件系统写进来的");
fs.closeSync(fd);
有回调写入
// 1. 引入模块
let fs = require("fs");
// 2. 打开文件
let fd = fs.openSync("fs1.txt", "w");
// 2.2 写入文件
fs.writeFile(fd, "我是用Node.js用文件系统写进来的", (err) => {
// 2.2.1 写入成功
if (!err) {
console.log("写入文件成功");
} else {
throw err;
}
});
<br />// 1. 引入模块
let fs = require("fs");
// 2. 打开文件
let fd = fs.openSync("fs1.txt", "w");
// 2.1 判断是否出错
// 2.2 写入文件
fs.writeSync(fd, "花木兰:");
fs.writeSync(fd, "干嘛要这么想不开,要在在脸上贴个输字!");
//2.3 关闭文件
fs.closeSync(fd);
console.log("写入成功")
// 1. 引入模块
let fs = require("fs");
// 2. 打开文件
fs.open("fs.txt", "w", (err, fd) => {
// 2.1 判断是否出错
if (!err) {
// 2.2 写入文件
fs.writeFile(fd, "我是用Node.js用文件系统异步写进来的", (err) => {
// 2.2.1 写入成功
if (!err) {
console.log("写入文件成功");
} else {
throw err;
}
// 2.3 关闭文件
fs.close(fd, (err) => {
if (!err) {
console.log("文件已经保存并关闭!");
}
});
});
} else {
throw err;
}
});
// 1. 引入模块
let fs = require("fs");
// 2. 创建写入流
let ws = fs.createWriteStream("fs1.txt");
console.log(ws);
// 3. 打开通道
ws.once("open", () => {
console.log("通道已经打开!");
});
ws.once("close", () => {
console.log("通道已经关闭");
});
// 4. 写入内容
ws.write("我再马路边");
ws.write("捡到一毛钱");
ws.write("去买了一把刀");
ws.write("杀死一头牛");
// 5. 关闭通道
ws.end();
1.二进制读取文件
let fs = require("fs");
// 2. 读取文件
fs.readFile("D:/PS/早安1.png", (err, data) => {
// 2.1 判断
if (!err) {
// 2.2 写入图片文件
fs.writeFile("zaoan.jpg", data, (err) => {
if (!err) {
console.log("写入成功")
} else {
throw err;
}
});
} else {
throw err;
}
});
console.log("也可以用同样的方法读取视频文件")
注意:如果要读取一个可读流中的数据,必须要为可读流绑定一个data事件,data事件绑定完毕,它会自动开始读取数据
// 1. 引入模块
let fs = require("fs");
// 2. 创建读入流
let rs = fs.createReadStream("D:\\珍藏视频\\带你去旅行.mp4");
let ws = fs.createWriteStream("666.mp4");
// 3. 监听流的打开和关闭
ws.once("open", () => {
console.log("读入通道已经打开!");
});
ws.once("close", () => {
console.log("读入通道已经关闭");
});
rs.once("open", () => {
console.log("写出通道已经打开!");
});
rs.once("close", () => {
console.log("写出通道已经关闭");
});
/// 4. 绑定data
rs.on("data", (data) => {
// console.log(data);
ws.write(data);
});
// 1. 引入模块
let fs = require("fs");
// 2. 创建读入流
let rs = fs.createReadStream("D:\\珍藏视频\\带你去旅行.mp4");
let ws = fs.createWriteStream("777.mp4");
// 3. 创建管道
rs.pipe(ws);