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)

流式文件写入

应用背景: 同步、异步、简单文件的写入都不适合大文件的写入,性能较差,容易导致内存溢出

  • 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(缓冲区)文件写入相关推荐

  1. node.js同步文件写入、异步文件写入、简单文件写入、简单文件读取、流式文件写入、流式文件读取、fs模块的其他方法

    fs(文件系统 File System) 使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载 fs模块中所有的操作都有两种形式可供选择(同步和异步) 同步文件会阻塞程序的执行,也就是 ...

  2. node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块

    node.js事件循环 node.js单进程,单线程的程序 每一个api都支持回调 所有的事件机制都是设计模式中的 一共是23种设计模式 http://design-patterns.readthed ...

  3. node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块

    node.js事件循环 node.js单进程,单线程的程序 每一个api都支持回调 所有的事件机制都是设计模式中的 一共是23种设计模式 http://design-patterns.readthed ...

  4. Node.js Buffer(缓冲区)

    一.Node.js Buffer(缓冲区) JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了 ...

  5. golang基础-终端读(Scanln\bufio)、bufio文件读、、ioutil读读压缩、缓冲区读写、文件写入、文件拷贝

    终端读写Scanln.Sscanf bufio带缓冲区的读 bufio文件读(1) bufio文件读(2) 通过ioutil实现读 读取压缩文件 文件写入 文件拷贝 终端读写Scanln.Sscanf ...

  6. 用node.js读写文件

    node.js没有二进制数据类型,却提供了类似字节数组的"流"数据类型,着一种数据类型在文件系统模块中频频出现 node.js打开文件 fs = require('fs'); co ...

  7. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发

    文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...

  8. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 //高并发

    文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...

  9. Node读写Excel文件(txt文件)

    文章目录 读取txt文件 写入txt文件 读取Excel文件 写入Excel文件 前端有时要处理一些数据(比如多语言文件内容的替换),我们不要傻乎乎地干这种重复枯燥又浪费时间的ctrl C+ ctrl ...

最新文章

  1. 【NOIP校内模拟】T2 华莱士(环套树)
  2. 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验
  3. 您的凭依不工作/登录没有成功
  4. 什么是Servlet?
  5. 细数 Spring 那些最常见的面试问题
  6. DOMException: Failed to execute ‘appendChild‘ on ‘Node‘: This node type does
  7. c语言周林答案,C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt...
  8. 【英语学习】【WOTD】cumulate 释义/词源/示例
  9. java dao修改语句_一个通用的DAO模型实现增删改查
  10. andriod 获取attrs_Android:具有attrs.xml中对象引用的Custom View,...
  11. 使用Sqlite数据库存储数据
  12. java html2text_将HTML转化为TEXT的Java类
  13. 音视频 H.264格式介绍
  14. 逆概率加权Doubly Robust Methods
  15. 虚拟机 服务器 root,虚拟机切换到root账户
  16. ____ To All Girls  Boys
  17. LNK1104:无法打开文件\.obj
  18. hMailServer搭建邮件服务器,用自己的域名邮箱,酷一些吧
  19. 985计算机英语六级,大学英语六级比四级难多少?985学长含泪告诉你!
  20. 2020.6.12 HCIE RS LAB战报

热门文章

  1. 长春有学计算机的中专吗,长春比较好的中专学校
  2. Java霸王的大陆梦幻版_三国志霸王的大陆,喜欢三国的进
  3. Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: “/zhu“
  4. 高估问题以及解决方法
  5. 微信小程序云端增强 SDK接入
  6. mysql出现LF怎么办,MySQL的LF_HASH
  7. 图像分割:LR-ASPP模型介绍
  8. 区块链名词解释之通证:WTC
  9. Centos7安装Geany
  10. Spark 应用开发程序