惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
C
Check Point Blog
博客园_首页
B
Blog
D
Docker
U
Unit 42
量子位
I
InfoQ
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
美团技术团队
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
Vercel News
Vercel News
Recent Announcements
Recent Announcements
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Google DeepMind News
Google DeepMind News

姓王者的博客

Linux用户Secure Boot自主维护指南 | 姓王者的博客 MAD Bugs 已经开始——关于信息安全的军备竞赛 | 姓王者的博客 解决钉钉Dingtalk无法在Linux新版内核上启动问题-修复可执行栈错误 | 姓王者的博客 突发:GitHub 正遭受大规模 Issue 赌博广告轰炸 | 姓王者的博客 Ubuntu26.04-beta体验:坚毅浣熊! | 姓王者的博客 fakeclaw装作龙虾发贴吧 | 姓王者的博客 找回12年前的QQ记忆 | 姓王者的博客 在Linux上玩Flash网页游戏-洛克王国 | 姓王者的博客 Copilot将使用交互数据来训练 | 姓王者的博客 重要通知-请更新我的GPG公钥 | 姓王者的博客 为了自由Android | 姓王者的博客 GPL"2,3"事 | 姓王者的博客 短文-对VitePlus的一点🤏小贡献 | 姓王者的博客 Bing收录没了?亲测有效的快速恢复指南 | 姓王者的博客 解决桌面设备二维码快速识别的工具-ClipQR | 姓王者的博客 解决 Nautilus 自定义终端插件安装依赖问题 | 姓王者的博客 OpenClaw 该熄火了 | 姓王者的博客 Vite8 - 统一的基建开始 | 姓王者的博客 Astro 6 推出啦 | 姓王者的博客 ubuntu的openvpn异常暂停推送更新 | 姓王者的博客 Ubuntu 24.04 安装 Win10 虚拟机 | 姓王者的博客 ESA-后记:热爱阿里云 | 姓王者的博客 Moonbit 0.8.0 重大发布,我也要改一下我的包 | 姓王者的博客 ESA Pages 边缘开发大赛获奖 | 姓王者的博客 Astro: 优化katex,mermaid和灯箱使用 | 姓王者的博客 从edgeone迁移到esa | 姓王者的博客 出租人类:AI时代的荒诞与真实 | 姓王者的博客 Astro 5.17构建性能优化实践:从18s到13s | 姓王者的博客 Moonbit License Checker 开发使用 | 姓王者的博客 Stalux Astro博客主题自荐 | 姓王者的博客
node.js初入 | 姓王者的博客
作者:xingwangzhe · 2024-12-10 · via 姓王者的博客

🕒 阅读时间:3 分钟 📝 字数:970 👀 阅读量: Loading...

Node.js® 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本。

安装

当然是前去node.js官网下载,安装好之后,在命令行窗口

node -v

如果显示版本号就说明安装成功了

Buffer

alloc && allocUnsafe

Buffer 是一个特殊的类,用于处理二进制数据流。它允许你以一种类型化数组的方式处理原始二进制数据。Buffer 类在全局范围内可用,不需要 require 任何模块即可使用。

buffer创建方式

let buf = Buffer.alloc(10);

console.log(buf);

在命令行运行

结果是

<Buffer 00 00 00 00 00 00 00 00 00 00>

当然Buffer还有Buffer.allocUnsafe()方法,诚如其名,这并不安全,因为会保留旧数据,但是这种创建比较块

from

unicode ascii

let buf = Buffer.from("hello");

console.log(buf);

结果是

这里是把对应字符的对应的unicode码表的数字转换为16进制。

Unicode是ASCII的超集,Unicode也可以叫万国码。一般情况下,在英语文字的字符可以直接在ASCII表找到。

问了下kimi

类别方法签名描述
创建 BufferBuffer.alloc(size[, fill[, encoding]])分配一个指定大小的新的 Buffer。
Buffer.allocUnsafe(size)分配一个指定大小的新的 Buffer,不初始化填充。
Buffer.allocUnsafeSlow(size)Buffer.allocUnsafe() 类似,但在必要时会进行零填充。
Buffer.from(array)从包含数字的数组创建一个新的 Buffer。
Buffer.from(buffer)从现有的 Buffer 创建一个新的 Buffer。
Buffer.from(string[, encoding])从字符串创建一个新的 Buffer。
写入 Bufferbuffer.write(string[, offset[, length]][, encoding])向 Buffer 写入字符串。
buffer.writeInt8(value, offset[, noAssert])向 Buffer 写入 8 位有符号整数。
buffer.writeUInt8(value, offset[, noAssert])向 Buffer 写入 8 位无符号整数。
buffer.writeInt16LE(value, offset[, noAssert])向 Buffer 写入 16 位有符号整数(小端序)。
buffer.writeUInt16LE(value, offset[, noAssert])向 Buffer 写入 16 位无符号整数(小端序)。
buffer.writeInt32LE(value, offset[, noAssert])向 Buffer 写入 32 位有符号整数(小端序)。
buffer.writeUInt32LE(value, offset[, noAssert])向 Buffer 写入 32 位无符号整数(小端序)。
buffer.writeFloatLE(value, offset[, noAssert])向 Buffer 写入 32 位浮点数(小端序)。
buffer.writeDoubleLE(value, offset[, noAssert])向 Buffer 写入 64 位浮点数(小端序)。
读取 Bufferbuffer.readInt8(offset[, noAssert])从 Buffer 读取 8 位有符号整数。
buffer.readUInt8(offset[, noAssert])从 Buffer 读取 8 位无符号整数。
buffer.readInt16LE(offset[, noAssert])从 Buffer 读取 16 位有符号整数(小端序)。
buffer.readUInt16LE(offset[, noAssert])从 Buffer 读取 16 位无符号整数(小端序)。
buffer.readInt32LE(offset[, noAssert])从 Buffer 读取 32 位有符号整数(小端序)。
buffer.readUInt32LE(offset[, noAssert])从 Buffer 读取 32 位无符号整数(小端序)。
buffer.readFloatLE(offset[, noAssert])从 Buffer 读取 32 位浮点数(小端序)。
buffer.readDoubleLE(offset[, noAssert])从 Buffer 读取 64 位浮点数(小端序)。
复制和填充 Bufferbuffer.copy(target[, targetStart[, sourceStart[, sourceEnd]]])将 Buffer 的数据复制到另一个 Buffer。
buffer.fill(value[, offset[, end]][, encoding])填充 Buffer 的数据。
buffer.slice([start[, end]])返回一个新的 Buffer,是原 Buffer 的一个切片。
比较 Bufferbuffer.equals(otherBuffer)比较 Buffer 和另一个 Buffer 是否相等。
buffer.compare(otherBuffer)比较 Buffer 和另一个 Buffer。
转换 Bufferbuffer.toString([encoding[, start[, end]]])将 Buffer 转换为字符串。
buffer.toJSON()返回 Buffer 的 JSON 表示。
buffer.slice([start, end])返回一个新的 Buffer,是原 Buffer 的一个切片。
  • Buffer 操作是 Node.js 中性能敏感的部分,因为它们直接与内存打交道。正确使用 Buffer 可以提高应用程序的性能。

fs

操作类型异步方法同步方法
删除文件或目录fs.rm(path[, options], callback)fs.rmSync(path[, options])
删除空目录fs.rmdir(path[, options], callback)fs.rmdirSync(path[, options])
读取文件fs.readFile(path[, options], callback)fs.readFileSync(path[, options])
写入文件fs.writeFile(file, data[, options], callback)fs.writeFileSync(file, data[, options])
追加文件fs.appendFile(file, data[, options], callback)fs.appendFileSync(file, data[, options])
重命名文件fs.rename(oldPath, newPath, callback)fs.renameSync(oldPath, newPath)
读取目录fs.readdir(path[, options], callback)fs.readdirSync(path[, options])
创建目录fs.mkdir(path[, options], callback)fs.mkdirSync(path[, options])
获取文件状态fs.stat(path, callback)fs.statSync(path)
监控文件变化fs.watch(filename[, options], listener)不适用
链接文件fs.link(existingPath, newPath, callback)不适用
符号链接fs.symlink(target, path[, type], callback)不适用

同步方法VS异步方法

同步方法 (Synchronous Methods)

  • 阻塞​:同步方法会阻塞事件循环,直到操作完成。在操作进行期间,Node.js 不能执行其他 JavaScript 代码,这可能会导致性能问题,尤其是在 I/O 操作中。
  • 直接返回​:同步方法会直接返回操作的结果或抛出异常。
  • 错误处理​:错误通过抛出异常的方式处理,可以使用 try...catch 语句捕获。
  • 简单性​:同步方法的代码通常更简单直观,因为它们遵循顺序执行的逻辑。
  • 使用示例​:

异步方法 (Asynchronous Methods)

  • 非阻塞​:异步方法不会阻塞事件循环。当调用一个异步方法时,Node.js 会在后台启动一个操作,然后立即继续执行后续代码,不会等待操作完成。
  • 回调函数​:异步方法通常接受一个或多个回调函数作为参数。当操作完成(无论是成功还是失败)时,Node.js 会调用这些回调函数。
  • 错误处理​:错误通常通过回调函数的第一个参数传递。
  • 性能​:对于 I/O 密集型操作,如文件读写,异步方法可以提高性能,因为它们允许其他操作同时进行,不会因为等待磁盘操作而闲置。