node学习笔记03

缓冲区处理(二进制数据)

什么是缓冲区

  • 缓冲区就是内存中操作数据的容器
  • 只是数据容器而已
  • 通过缓冲区可以很方便的操作二进制数据
  • 而且在大文件操作时必须有缓冲区

为什么要有缓冲区

  • JavaScript是比较擅长处理字符串,但是早期的应用场景主要用于处理HTML文档,不会有太大篇幅的数据处理,也不会接触到二进制的数据。
  • 而在Node中操作数据、网络通信是没办法完全以字符串的方式操作的
  • 所以在Node中引入了一个二进制的缓冲区的实现:Buffer

创建缓冲区

  • 创建长度为4个字节的缓冲区

    1
    let buffer = new Buffer(4)
  • 通过指定数组内容的方式创建

    1
    let buffer = new Buffer([00,01])
  • 通过指定编码的方式创建

    1
    let buffer = new Buffer("hello","utf8");

Node默认支持的编码

Buffers和JavaScript字符串对象之间转换时需要一个明确的编码方法。下面是字符串的不同编码。

  • “ASCII” —7位的ASCII数据,这种编码方式非常快,它会移除最高位内容
  • “UTF8” — 多字节编码Unicode字符。大部分网页和文档使用这类编码方式。
  • “UTF16LE” — 2个或4个字节,Little Endian(LE)编码Unicode字符。编码范围(U+10000到U+10FFFF)。
  • “UCS2” — “UTF16LE”的子集。
  • “base64” — Base64字符编码
  • “binary” — 仅使用每个字符的头8位将原始的二进制信息进行编码。在需使用Buffer的情况下,应该尽量避免使用这个已经过时的编码方式,这个编码方式将会在未来某个版本中弃用。
  • “hex” — 每个字节都采用2进制编码。

文件流

什么是流?

  • 文件流、网络流
  • 任何数据的最根本
  • 表现形式都是二进制的

文件流

  • 文件流就是以面向对象的概念对文件数据进行的抽象
  • 文件流定义了一些对文件数据的操作方式

以文件流的方式来拷贝文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//以文件流的方式复制
const fs = require("fs");
const path = require("path");
//创建读取流
let streamReader = fs.createReadStream("./github.css");
//创建写入流
let streamWriter = fs.createWriteStream("./markdown.css");
fs.stat("./github.css",(err,stats) => {
if(stats) {
let readTotal = 0;
streamReader.on("data",(chunk)=>{
streamWriter.write(chunk,(err) => {
console.log("写入进度:" + ((readTotal += chunk.length) / stats.size * 100) + "%");
})
});
streamReader.on("end",()=>{
console.log("复制完毕")
})
}
});

当然我们还可以用pipe方法

1
2
3
4
5
6
7
8
//用pipe的方式复制文件
const fs =require("fs");
const path = require("path");
let streamReader = fs.createReadStream("./github.css");
let streamWriter = fs.createWriteStream("./github1.css");
streamReader.pipe(streamWriter);

是不是清爽了好多

网络操作

相关模块

  • url:用于解析URL格式的模块
  • querystring:用于操作类似k1=v1&k2=v2的查询字符串
  • http:用于创建http服务器或http客户端

URL解析模块

  • 将一个URL字符串解析为一个URL对象

    1
    url.parse(urlStr[,parseQueryString][,slashesDenoteHost])
  • 将一个URL对象格式化为字符串的形式

    1
    url.format(urlObj)
  • 用于组合URL成员为完整的URL字符串

    1
    url.resolve(from,to)

查询字符串模块(querystring)

  • querystring.escape
  • querystring.parse(str[, sep][, eq][, options])
  • querystring.stringify(obj[, sep][, eq][, options])
  • querystring.unescape


本文结束,感谢阅读。

本文作者:melody0z
本文链接:https://melodyvoid/Node/node-learning-notes-03.html
欢迎转载,转载请注明文本链接

坚持原创技术分享,您的支持将鼓励我继续创作!