• stream数据流


    首先必须先要了解Buffer,Buffer是js和c++的结合体,类数组,通常与Stream一起用:

    1.

    (1).Buffer是个类,因此可以构建成对象

    (2).buf具有数组的性质

    字符串转换成二进制:

    (1)通常用Buffer来构建二进制

        new Buffer(string,[encodding])  默认是utf-8  //中文一个字是3个字节

        buf对象之间的encodding相互转换

        buf.write(string,[encodding])

    (2)buf转为字符串

        buf.toString([encodding]) 

        buf += chunk   //这是一种默认的转换,会将二进制转为字符串,默认是utf-8

        因为buf在转换成string时,中文是3个字节,如果不是宽字节编码时,就会截断一部分buf,造成乱码

    (3)buffer的拼接(buffer的应用中一般是一段一段的传输的),一般用在两种情况下

         (1) var rs = fs.createReadStream()

               rs的data事件,是一段一段读的

              rs.on('data',function(chunk){})

         (2)网络请求中,res.on('data',function(chunk){})

        拼接中用: 

      var rs = fs.createReadStream('./test.txt');
      var chunks = [];
      rs.on('data', function (chunk) {
        chunks.push(chunk);
      });
      rs.on('end', function () {
        var buf = Buffer.concat(chunks);
        var str = buf.toString()
      });

    (4)对文件读取时以及网络请求的优化

          (1)网络中优化

              node可以将静态的文件转换成二进制的内容,将二进制的内容返回,可将性能大幅度提高.

              同时将二进制采用zlib进行压缩

          (2)文件读取的优化

               fs.readFile与fs.createReadStream的区别:

           fs.readFile是一次将读取的内容存到内存中

          fs.createReadStream是从磁盘中读一点,放到内存中,先在内存中准备一段Buffer,然后调用fs.read()读取时逐步复制到Buffer中.因此调用fs.read()则调用一次磁盘读取.

            fs.createReadStream(path,opts)       其中:highWaterMark设置为64*1024这样可保证速度

             // 创建一个可读流
             var readerStream = fs.createReadStream('input.txt');
    
            // 创建一个可写流
             var writerStream = fs.createWriteStream('output.txt');
    
           // 管道读写操作
           // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
           readerStream.pipe(writerStream);

    (5)采用压缩,判断压缩类型:                 

                     

  • 相关阅读:
    Twain文档链接
    JavaScript 事件绑定函数
    VC++ 字符串Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR
    Sciter参考资料
    C++对windows控制面板的操作
    C++ Msi函数判断应用是否已经安装
    WMware 安装 Mac OSX
    C++文件流操作
    jquery弹出层
    CSS3 水平翻转
  • 原文地址:https://www.cnblogs.com/jay--zhang/p/6229231.html
Copyright © 2020-2023  润新知