Buffer介紹
1.buffer(緩存區)
結構和數組相似,操作的方法一個數組一致
js中原生的數組性能比較差,而且數組不能存儲二進制文件,比傳統數組好
buffer不需要引入模塊,通過Buffer對象,其中存儲的都是二進制,顯示的時候以十六進制顯示
buffer中一個元素,佔用內存中的一個字節,長度確定之後,不能改變
2.創建一個10個字節的buffer
var buf2=Buffer.alloc(10);
不安全的創建,未清空其中的數據
var buf3=Buffer.allocUnsafe(10);
3.通過索引來操作buffer中的元素
buf[0]=88;
buf[1]=255;
buf[2]=0xaa;
//buf[10]不會儲存,因爲buffer的長度已經確定了
buf[10]=1;
//因爲一個字節最大值儲存爲255,對於超過的值取後八位
buf[3]=555;
1.fs(文件系統,重要)
- 通過node來操作操作系統中的文件,該模塊中提供了許多存儲,發送文件的api
- 使用文件系統,需要先引進fs核心模塊,不需要下載
- 同步文件系統或者異步文件系統
(1)同步文件的寫入
let fs=require('fs');
console.log(fs);
//打開文件 返回的是文件描述符
let fd= fs.openSync('hello.txt','w');
//向文件中寫入
fs.writeFileSync(fd,'今天的天氣還算不錯!');
//關閉文件
fs.close(fd);
(2)異步文件的寫入
let fs=require('fs');
//打開文件 返回的是文件描述符
fs.open('test.txt','w',function (err,fd) {
if(!err){
fs.write(fd,"異步寫入內容",function (err) {
if(!err){
console.log('寫入成功');
}
});
fs.close(fd,function () {
});
}else{
console.log(err);
}
});
console.log('程序執行');
(3)簡單文件的寫入
fs.writeFile(file, data[, options], callback)
demo:
const data = new Uint8Array(Buffer.from('Node.js中文網'));
fs.writeFile('文件.txt', data, (err) => {
if (err) throw err;
console.log('文件已被保存');
});
(4)流式文件寫入
當我們的文件比較大時,我們需要通過流式文件寫入
let fs =require('fs');
//fs.createWriteStream(path[, options])
let ws= fs.createWriteStream('stream.txt');
//寫入信息
ws.once("open",function () {
console.log("流打開了");
}
)
ws.once("close",function () {
console.log("流關閉了");
}
)
ws.write("通過流寫入文件信息");ws.write("通過流寫入文件信息");
ws.write("通過流寫入文件信息");ws.write("通過流寫入文件信息");
ws.end();
(5)簡單文件讀取
fs.readFile(path[, options], callback)
//fs.readFile(path[, options], callback)
let fs=require('fs');
//返回的data爲Buffer對象
let d=fs.readFile('test.jpg',(err,data)=>{
if(!err){
console.log(data);
fs.writeFile('new.jpg',data,()=>{
console.log("文件寫入成功!");
})
}else{
console.log(err);
}
})
(6)流式文件讀取 也使用大文件讀取,可以多次讀取
let fs =require('fs');
//fs.createWriteStream(path[, options])
let rs= fs.createReadStream('stream.txt');
let ws= fs.createWriteStream('new.txt');
//寫入信息
ws.once("open",function () {
console.log("寫入流打開了");
}
)
ws.once("close",function () {
console.log("寫入流關閉了");
}
)
//寫入信息
rs.once("open",function () {
console.log("讀取流打開了");
}
);
rs.once("close",function () {
console.log("讀取流關閉了");
ws.end();
}
);
rs.on('data',function (data) {
//這個讀取是分段的
console.log(data.length);
ws.write(data);
});