node-Buffer(缓冲区)文件写入
Node
Buffer(缓冲区)
Buffer的结构和数组很像,操作的方法也和数组类似
数组不能存储二进制文件,而buffer就是专门用来存储二进制文件
使用buffer不需要引入模块,直接使用即可
在buffer中存储的都是二进制数据,但是在显示时都是以16进制显示
buffer中每一个元素的范围是从00 - ff 0 - 255
00000000 - 11111111计算机 一个0 或一个1 我们称为1位(bit)
8bit=1Byte(字节)
1024byte=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
buffer中的一个元素占用内存的一个字节
Buffer的大小一旦确定,则不能修改,Buffer实际上是对底层内存的直接操作Buffer.from(str) 将一个字符串转换为buffer
var str="Hello 雪风"; //将一个字符串保存到buffer中 var buf=Buffer.from(str); console.log(buf.length);//12 占用内存的大小 console.log(str.length);//8 字符串的长度 console.log(buf);//<Buffer 48 65 6c 6c 6f 20 e9 9b aa e9 a3 8e>
Buffer.alloc(size) 创建一个指定大小的Buffer
/创建一个指定大小的buffer //buffer的构造函数都是不推荐使用的(new Buffer) //var buf2=new Buffer(1024);//1024个字节 1KB 的buffer var buf2=Buffer.alloc(10); //通过索引来操作buf中的元素 buf2[0]=255; buf2[1]=0xaa; buf2[2]=556;//最大保存为255 556二进制1000101100 //<Buffer ff aa 2c 00 00 00 00 00 00 00> 2c的十进制为00101100 明显超过范围只取二进制后八位 console.log(buf2); //只要数字在控制台或页面中输出一定是10进制 console.log(buf2[1]);//170 console.log(buf2[1].toString(16));//但是字母可以指定在控制台显示的进制 for(var i=0;i<buf2.length;i++){console.log(buf2[i]); }//buffer遍历和数组遍历一样
Buffer.alloUnsafe(size) 创建一个指定大小的Buffer,但是可能包含敏感数据
//Buffer.allocUnsafe(size) 创建一个指定大小的buffer,但是buffer中可能含有敏感数据 /*var buf3 = Buffer.allocUnsafe(10); console.log(buf3);*/
Buffer.toString() 将缓冲区中的数据转换为字符串
var buf4 = Buffer.from("我是一段文本数据");console.log(buf4.toString());//我是一段文本数据
文件系统(File System)
文件系统简单来说就是通过Node来操作系统中的文件
使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载
同步文件的写入
手动操作的步骤
1.打开文件
fs.openSync(path, flags[, mode]) path 要打开文件的路径
flags 打开文件要做的操作的类型
r 只读的
w 可写的 mode 设置文件的操作权限,一般不传
返回值: 该方法会返回一个文件的描述符作为结果,我们可以通过该描述符来对文件进行各种操作
2.向文件中写入内容
fs.writeSync(fd, string[, position[, encoding]]) fd 文件的描述符,需要传递要写入的文件的描述符
string 要写入的内容
position 写入的起始位置
encoding 写入的编码,默认utf-8
3.保存并关闭文件
fs.closeSync(fd) fd 要关闭的文件的描述符
var fs=require("fs");var fd=fs.openSync("text.txt","w");fs.writeSync(fd,"雪风",0);fs.closeSync(fd);//Process finished with exit code 0代表成功运行
异步文件写入
//引入fs模块 var fs=require("fs"); var f; //打开文件 异步文件打开,回调函数不能省略 fs.open("text2.txt","w",function (err,fd) {//判断是否出错if(!err){f=fd;}else{console.log(err);} }); console.log("open下的代码先执行,异步文件写入不会阻塞下面的代码,回调函数交给I/O执行");
方法
fs.open(path, flags[, mode], callback) 用来打开一个文件
异步调用的方法,结果都是通过回调函数的参数返回的 回调函数两个参数:
err 错误对象,如果没有错误则为null
fd 文件的描述符
fs.write(fd, string[, position[, encoding]], callback) 用来异步写入一个文件
fs.close(fd, callback)
用来关闭文件//引入fs模块 var fs=require("fs");//打开文件 异步文件打开,回调函数不能省略 fs.open("text2.txt","w",function (err , fd) {//判断是否出错if(!err){//如果没有出错,则对文件进行写入操作fs.write(fd,"这是异步写入的内容",function (err) {if(!err){console.log("写入成功~~");}//关闭文件fs.close(fd , function (err) {if(!err){console.log("文件已关闭~~~");}});});}else{console.log(err);} }); console.log("open下的代码先执行,异步文件写入不会阻塞下面的代码,回调函数交给I/O执行");
打开状态
简单文件写入
var fs=require("fs");//F:\WebStorm-workspace\node\02.文件系统\hello.txt //F:/WebStorm-workspace/node/02.文件系统/hello.txt fs.writeFile("F:/WebStorm-workspace/node/02.文件系统/hello.txt","这是通过writeFile写入的内容",{flag:"w"} , function (err) {if(!err){console.log("写入成功~~~");}else{console.log(err);} });
流式文件写入
应用背景: 同步、异步、简单文件的写入都不适合大文件的写入,性能较差,容易导致内存溢出
fs.createWriteStream(path[, options])
可以用来创建一个可写流
path,文件路径
options 配置的参数on(事件字符串,回调函数)
可以为对象绑定一个事件once(事件字符串,回调函数)
可以为对象绑定一个一次性的事件,该事件将会在触发一次以后自动失效
//流式文件写入 //创建一个可写流 var fs = require("fs"); var ws = fs.createWriteStream("F:/WebStorm-workspace/node/02.文件系统/hello2.txt");ws.once("open",function () {console.log("流打开了~~~"); });ws.once("close",function () {console.log("流关闭了~~~"); });//通过ws向文件中输出内容 ws.write("通过可写流写入文件的内容"); ws.write("今天天气真不错"); ws.write("锄禾日当午"); ws.write("红掌拨清清"); ws.write("清清真漂亮");//关闭流 这里不能用ws.close(); close代表的是从A往B里刚传第一个内容后,就在B中把传输线给剪短了,这样的话文件传输不全的 //用end的话 就代表当A中所有内容传输完毕后,在A中把传输线给剪了,这样传输内容能保证全运输过去 ws.end();
文件的读取
1.同步文件读取
2.异步文件读取
3.简单文件读取
fs.readFile(path[, options], callback)
fs.readFileSync(path[, options])
path 要读取的文件的路径
options 读取的选项
callback回调函数,通过回调函数将读取到内容返回(err , data)
err 错误对象
data 读取到的数据,会返回一个Buffer
var fs = require("fs");fs.readFile("F:\\WebStorm-workspace\\node\\02.文件系统\\an.jpg" , function (err , data) {if(!err){//console.log(data);//将data写入到文件中fs.writeFile("C:\\Users\\郭帅\\Desktop\\helloNpm\\hello.jpg",data,function(err){if(!err){console.log("文件写入成功");}} );}
});
4.流式文件读取
流式文件读取也适用于一些比较大的文件,可以分多次将文件读取到内存中
var fs = require("fs");//创建一个可读流var rs = fs.createReadStream("F:\\WebStorm-workspace\\node\\02.文件系统\\a.mp3");//创建一个可写流var ws = fs.createWriteStream("b.mp3");//监听流的开启和关闭rs.once("open",function () {console.log("可读流打开了~~");});rs.once("close",function () {console.log("可读流关闭了~~");//数据读取完毕,关闭可写流ws.end();});ws.once("open",function () {console.log("可写流打开了~~");});ws.once("close",function () {console.log("可写流关闭了~~");});//如果要读取一个可读流中的数据,必须要为可读流绑定一个data事件,data事件绑定完毕,它会自动开始读取数据rs.on("data", function (data) {// console.log(data.length);// 将读取到的数据写入到可写流中ws.write(data);});
pipe()可以将可读流中的内容,直接输出到可写流中
var fs = require("fs");//创建一个可读流var rs = fs.createReadStream("F:\\WebStorm-workspace\\node\\02.文件系统\\a.mp3");//创建一个可写流var ws = fs.createWriteStream("c.mp3");//pipe()可以将可读流中的内容,直接输出到可写流中rs.pipe(ws);
fs模块的其他方法
fs.existsSync(path) 检查一个文件是否存在
var isExists=fs.existsSync("123.mp3"); //console.log(isExists); false
fs.stat(path,callback)
fs.statSync(path)
获取文件的状态
它会给我们返回一个对象,这个对象中保存了当前对象状态的相关信息fs.stat("F:\\WebStorm-workspace\\node\\02.文件系统\\a.mp3",function (err,stat) {console.log(stat.size); });
fs.readdir(path[,options],callback)
fs.readdirSync(path[,options]) 读取一个目录的目录结构
files是一个字符串数组,每一个元素就是一个文件夹或文件的名字fs.readdir(".",function (err,files) {if(!err){console.log(files);} });
fs.truncate(path,len,callback)
fs.truncateSync(path,len)截断文件,将文件修改为指定的大小
fs.truncateSync("F:\\WebStorm-workspace\\node\\02.文件系统\\text2.txt",10);
fs.mkdir(path[,mode],callback)
fs.mkdirSync(path[,mode])
创建一个目录
fs.rmdir(path[,mode],callback)
fs.rmdirSync(path[,mode])
删除一个目录fs.mkdirSync("hello"); fs.rmdirSync("hello");
fs.rename(oldPath,newPath,callback)
fs.renameSyna(oldPath,newPath) 对文件进行重命名
参数:
oldPath 旧的路径
enwPath 新的路径
callback 回调函数fs.renameSync("F:\\WebStorm-workspace\\node\\c.mp3","d.mp3",function (err) {if(!err){console.log("修改成功");} });修改名字 fs.renameSync("F:\\WebStorm-workspace\\node\\d.mp3","C:\\Users\\郭帅\\Desktop\\helloNpm\\d.mp3",function (err) {if(!err){console.log("修改成功");} });修改位置
fs.watchFile(filename[,options],listener)
监视文件的修改
参数:
filename 要监视的文件的名字
options配置选项
listener 回调函数,当文件发生变化时,回调函数会执行
在回调函数中会有两个参数:
curr 当前文件的状态
prev 修改前文件的状态
-这两个对象都是stats对象fs.watchFile("F:\\WebStorm-workspace\\node\\02.文件系统\\hello.txt",{interval:1000},function (curr,prev) {console.log("修改前文件大小"+prev.size);console.log("修改后文件大小"+curr.size); });
node-Buffer(缓冲区)文件写入相关推荐
- node.js同步文件写入、异步文件写入、简单文件写入、简单文件读取、流式文件写入、流式文件读取、fs模块的其他方法
fs(文件系统 File System) 使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载 fs模块中所有的操作都有两种形式可供选择(同步和异步) 同步文件会阻塞程序的执行,也就是 ...
- node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块
node.js事件循环 node.js单进程,单线程的程序 每一个api都支持回调 所有的事件机制都是设计模式中的 一共是23种设计模式 http://design-patterns.readthed ...
- node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块
node.js事件循环 node.js单进程,单线程的程序 每一个api都支持回调 所有的事件机制都是设计模式中的 一共是23种设计模式 http://design-patterns.readthed ...
- Node.js Buffer(缓冲区)
一.Node.js Buffer(缓冲区) JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了 ...
- golang基础-终端读(Scanln\bufio)、bufio文件读、、ioutil读读压缩、缓冲区读写、文件写入、文件拷贝
终端读写Scanln.Sscanf bufio带缓冲区的读 bufio文件读(1) bufio文件读(2) 通过ioutil实现读 读取压缩文件 文件写入 文件拷贝 终端读写Scanln.Sscanf ...
- 用node.js读写文件
node.js没有二进制数据类型,却提供了类似字节数组的"流"数据类型,着一种数据类型在文件系统模块中频频出现 node.js打开文件 fs = require('fs'); co ...
- JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发
文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...
- JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 //高并发
文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...
- Node读写Excel文件(txt文件)
文章目录 读取txt文件 写入txt文件 读取Excel文件 写入Excel文件 前端有时要处理一些数据(比如多语言文件内容的替换),我们不要傻乎乎地干这种重复枯燥又浪费时间的ctrl C+ ctrl ...
最新文章
- 【NOIP校内模拟】T2 华莱士(环套树)
- 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验
- 您的凭依不工作/登录没有成功
- 什么是Servlet?
- 细数 Spring 那些最常见的面试问题
- DOMException: Failed to execute ‘appendChild‘ on ‘Node‘: This node type does
- c语言周林答案,C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt...
- 【英语学习】【WOTD】cumulate 释义/词源/示例
- java dao修改语句_一个通用的DAO模型实现增删改查
- andriod 获取attrs_Android:具有attrs.xml中对象引用的Custom View,...
- 使用Sqlite数据库存储数据
- java html2text_将HTML转化为TEXT的Java类
- 音视频 H.264格式介绍
- 逆概率加权Doubly Robust Methods
- 虚拟机 服务器 root,虚拟机切换到root账户
- ____ To All Girls Boys
- LNK1104:无法打开文件\.obj
- hMailServer搭建邮件服务器,用自己的域名邮箱,酷一些吧
- 985计算机英语六级,大学英语六级比四级难多少?985学长含泪告诉你!
- 2020.6.12 HCIE RS LAB战报
热门文章
- 长春有学计算机的中专吗,长春比较好的中专学校
- Java霸王的大陆梦幻版_三国志霸王的大陆,喜欢三国的进
- Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: “/zhu“
- 高估问题以及解决方法
- 微信小程序云端增强 SDK接入
- mysql出现LF怎么办,MySQL的LF_HASH
- 图像分割:LR-ASPP模型介绍
- 区块链名词解释之通证:WTC
- Centos7安装Geany
- Spark 应用开发程序