zoukankan      html  css  js  c++  java
  • 文件操作和网络通信

    1. 文件操作

    1.1. 为什么要进行文件操作

    • 浏览器端JavaScript不能操作文件(安全性考虑)
    • Node.js需要文件操作,因为
      • 可以开发命令行的工具,例如:i5ting
      • 开发高效率的web服务器,需要操作文件
    • 文件种类繁多,计算机最终存储的时候都是以2进制形式存储
    • 存储单位
      • 1byte = 8bit
      • 1k =
      • 1m = 1024k

    1.2. Buffer对象

    • Buffer
      • Buffer对象是一个像Array的对象,主要存储字节
      • Node.js作为后端开发,需要处理图片、js、css等文件,图片等资源是以二进制形式存在的,所以在Node.js中增加了一个buffer对象,专门用来存放二进制数据
      • Buffer对象其实就是在内存中申请一块空间,用于存放数据
    • Buffer对象的使用(了解)

      • 第一种创建方式
        //开辟4个字节的空间存储数据
        let buffer = new Buffer(4);
        //创建完成后,buffer分配的内存可能有数据
        //清空buffer对象
        buffer.fill(0);
        
      • 第二种创建方式
        //直接存储数据在buffer中
        let buffer = new Buffer("hello itcast");
        
      • 读取文件中遇到的Buffer

        var fs = require("fs");
        fs.readFile("01-buffer.js", function (err,content) {
          //此处的content就是Buffer
          console.log(content);
        });
        
        fs.readFile("01-buffer.js","utf8", function (err,content) {
          //指定了编码后,获取到的content是字符串
          console.log(content);
        });
        
      • Buffer支持的编码

        • ascii
        • utf8 默认
        • utf16
        • ucs2
        • base64
        • hex
        • Binary
      • 支持gb2312-第三方包 iconv-lite

      • Buffer的常见方法

        • buf.write() 往buffer写入内容
        • buf.toString([编码]) 把buffer中的内容转换成字符串
        • buf.length 获取buffer的长度
        • Buffer.isEncoding("utf8") 检查支持的编码(不支持gb2312)
    • File System

      • 操作文件夹

        • mkdirSync() 同步创建文件夹
        • mkdir() 异步创建文件夹

        • rmdirSync() 同步删除文件夹

        • rmdir() 异步删除文件夹

        • 判断文件是否存在

      • 操作文件

        • writeFile() 写入文件,会覆盖以前的内容
        • appendFile() 追加文件
        • readFile() 读取文件
        • rename() 更改文件名
        • unlink() 删除文件
        • stat() 获取文件的相关属性

        • watchFile() 监控文件或文件夹内文件的改变

      • 练习:监视文件abc/abc.txt,如果文件发生变化把内容拷贝到target/123.txt

      • 拷贝文件:

        • 之前的方式只能拷贝小文件
        • 拷贝大文件
      • 文件流操作

        • createReadStream()
        • createWriteStream()
        • 拷贝大文件带进度

          ```javascript "use strict"

          const fs = require("fs");

          let sourceFile ="xdy.avi"; let targetFile = "123.itcast";

          //文件流读写 进行大文件复制 //创建读流对象 let rs = fs.createReadStream(sourceFile); //创建写流对象 let ws = fs.createWriteStream(targetFile);

        //文件大小
        let fileSize = fs.statSync(sourceFile).size;
    
        //总共写入的大小
        let writeTotal = 0;
    
        //监听data事件
        rs.on("data", chunk => {
            //每次读到的数据  buffer对象
    
            writeTotal += chunk.length;
    
    
            //把chunk写入目标文件
            ws.write(chunk);
    
            console.log(writeTotal/fileSize * 100);
        });
    
        //读取完毕
        rs.on("end", ()=>{
            console.log("文件读取完毕");
    
            //写入结束
            ws.end(()=>{
                console.log("文件写入完毕");
            });
        });
        ```
    
        - 管道拷贝大文件
    
        ```javascript
        "use strict"
        const fs = require("fs");
    
        let sourceFile ="xdy.avi";
        let targetFile = "123.itcast";
    
        let rs = fs.createReadStream(sourceFile);
        let ws = fs.createWriteStream(targetFile);
    
        rs.pipe(ws);
        ```
    

    2. Node.js的异步编程

    • 同步和异步的概念
    • 非阻塞式I/O
    • 事件驱动
    • 回调函数
    • 监视js的变化重新运行的插件 npm install nodemon -g
      • 使用 nodemon js文件路径

    3. 网络通信

    • 网络的概念

    • IP和端口的概念

    • Socket的概念

    • 打开telnet

      程序和功能-->

    • 自己开发一个小服务器

    "use strict";
    
    const net = require("net");
    
    
    //创建server对象
    let server = net.createServer();
    
    //监听连接到服务器上的客户端
    server.on("connection", (socket) => {
        console.log("haha");
        //服务器的socket
        //向客户端发送消息
        socket.write("welcome to my server");
    
        socket.on("data", (content) => {
            //服务器发送的内容。buffer
            console.log(content.toString());
        });
    });
    
    //监听端口
    server.listen(8888,()=>{
        console.log("正在监听...");
    });
    
    • 自己开发的客户端
    "use strict";
    
    var net = require("net");
    
    let port = 8888;
    let ip = "127.0.0.1";
    
    //连接服务器
    let client = net.createConnection(port,ip,()=>{
        console.log("连接服务器成功");
    
        //向服务器发送消息
        client.write("你好服务器");
    });
    
    //接收服务器的消息
    client.on("data", (content) => {
        //服务器发送的内容。buffer
        console.log(content.toString());
    });
    
    • 处理错误
    //注册error事件
    socket.on("error",()=>{
        console.log("客户端下线");
    })
  • 相关阅读:
    python 教程 第十七章、 网络编程
    SecureCRT循环检查设备状态
    《让僵冷的翅膀飞起来》系列之一——从实例谈OOP、工厂模式和重构
    设计,看上去很美!——“Design & Pattern”团队的第一块砖
    杂拌儿
    换了个计数器
    在Remoting客户端激活方式采用替换类以分离接口与实现
    动动手脚,protected不再被保护
    博客园出现在MSDN中国的首页链接
    近期写作计划和读书安排
  • 原文地址:https://www.cnblogs.com/bici/p/6036979.html
Copyright © 2011-2022 走看看