nodejs:官方文档1 buffer crypto

20 篇文章 1 订阅

nodejs用途和示例
https://nodejs.org/docs/latest-v15.x/api/synopsis.html

fs、http 就不详细展开

buffer

原文链接 原文链接2

计算机会将无论图片、视频或其他数据都转换为二进制并存储,这就是我们说的二进制数据
(L在字符集中是76,76在计算机中的存储形式应该是01001100 )

Buffer 类被引入作为 Node.js API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。(类似于缓冲区域

Buffer一般配合Stream流使用,充当数据缓冲区

二进制数据流(streams of binary data)
实际上,巨型数据会被分割成小块(chunks)进行传输。所以,buffer的原始定义中所说的(“streams of binary data… in the context of… file system”)意思就是说二进制数据在文件系统中的传输。比如,将file1.txt的文字存储到file2.txt中。

经验:

  1. 一个中文默认占用三个字节

1. 创建buff
三种方式都可以创建buffer

Buffer.alloc(字节长度, 字符串)
Buffer.from(字符串)
Buffer.allocUnsafe(字节长度)

2.buffer实例方法
在这里插入图片描述
3.buffer静态方法
在这里插入图片描述

// import { Buffer } from 'buffer';
let  { Buffer } = require('buffer')


// 创建长度为 10 的以零填充的缓冲区。
const buf1 = Buffer.alloc(10);
console.log(buf1)
// <Buffer 00 00 00 00 00 00 00 00 00 00>

// 创建长度为 10 的缓冲区,
// 使用值为 `1` 的字节填充。
const buf2 = Buffer.alloc(10, 1);

// 创建长度为 10 的未初始化的缓冲区。
// 这比调用 Buffer.alloc() 快,
// 但返回的缓冲区实例可能包含旧数据,
// 需要使用 fill()、write() 、
// 或其他填充缓冲区内容的函数重写。
const buf3 = Buffer.allocUnsafe(10);

// 创建包含字节 [1, 2, 3] 的缓冲区。
const buf4 = Buffer.from([1, 2, 3]);

// 创建包含字节 [1, 1, 1, 1] 的缓冲区,
// 所有条目都使用 `(value & 255)` 截断以符合范围 0–255。
const buf5 = Buffer.from([257, 257.5, -255, '1']);

// 创建包含字符串 'tést' 的 UTF-8 编码字节的缓冲区:
// [0x74, 0xc3, 0xa9, 0x73, 0x74](十六进制)
// [116, 195, 169, 115, 116](十进制)
const buf6 = Buffer.from('tést');

// 创建包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的缓冲区。
const buf7 = Buffer.from('tést', 'latin1');
console.log(buf7)

arraybuffer

Buffer 实例也是 JavaScript Uint8Array 和 TypedArray 实例。 所有 TypedArray 方法都可在 Buffer 上使用。 但是,Buffer API 和 TypedArray API 之间存在细微的不兼容。

二进制数组由三类对象组成

DataView视图:用来读写复杂类型的二进制数据。
查看链接

arraybuffer

Buffer 实例也是 JavaScript Uint8Array 和 TypedArray 实例。 所有 TypedArray 方法都可在 Buffer 上使用。 但是,Buffer API 和 TypedArray API 之间存在细微的不兼容。
二进制数组由三类对象组成:
ArrayBuffer对象:代表原始的二进制数据。(ArrayBufffer不能直接读写)
TypedArray视图:用来读写简单类型的二进制数据。
DataView视图:用来读写复杂类型的二进制数据。
就是说数据是可以通过二进制数据来描述的。

TypedArray有Int8Array、Uint8Array、Uint16Array、Float32Array等链接

let a = new ArrayBuffer(64); // 64指的是你申请二进制数据的个数
console.log(a)

// 将数据转换成二进制形式
let ms = "我是谁,<b>who are you</b>";
let ss = new ArrayBuffer(ms.length * 2);//申请ms字符串长度*2的内存空间,乘以2是因为一个字符串等于2个字节。
console.log(ss)
function str2ab(str) {
  var buf = new ArrayBuffer(str.length * 2); // 每个字符占用2个字节
  var bufView = new Uint8Array(buf);
  for (var i = 0, strLen = str.length; i < strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return buf;
}
const b = str2ab(ss)
console.dir(b)

let { Buffer } = require('buffer')
// import { Buffer } from 'buffer';
const buf = Buffer.from([1, 2, 3, 4]);
const uint32array = new Uint32Array(buf);
console.log(uint32array);
// 打印: Uint32Array(4) [ 1, 2, 3, 4 ]

迭代器

let { Buffer } = require('buffer')
const buf2 = Buffer.from([1, 2, 3]);

for (const b of buf2) {
  console.log(b);
}

crypto

crypto模块的目的是为了提供通用的加密和哈希算法。用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢。Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。

const crypto = require('crypto');

// MD5是一种常用的哈希算法,用于给任意数据一个“签名”。这个签名通常用一个十六进制的字符串表示
const hash = crypto.createHash('md5');

// 可任意多次调用update():
hash.update('Hello, world!');
hash.update('Hello, world!');

console.log(hash.digest('hex')); // 7e1977739c748beac0c0fd14fd26a544
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值