54 # 可写流基本用法

news2024/11/24 4:30:13

内部也是基于 events 模块,fs.openfs.write,如果文件不存在就会创建文件,默认会清空文件并写入

注意点:可写流的 highWaterMark 表示预期占用的内存(达到或者超过预期后返回的值就是false),默认 16k (指代的不是每次写多少) 不会影响内容的写入,可以利用 highWaterMark 来控制写入的速率。

const fs = require("fs");
const path = require("path");

let ws = fs.createWriteStream(path.resolve(__dirname, "./54/name.txt"), {
    flags: "w", // w 代表写入
    encoding: "utf-8",
    mode: 0o666, // 模式:可读可写
    autoClose: true, // fs.close
    start: 0,
    highWaterMark: 3,
});
console.log(ws);

在这里插入图片描述

  • ws.write 写入的内容,它是异步的,内容必须是 string or buffer
  • ws.end 可以关闭文件,相当于 ws.write + ws.close
  • ws.on("drain", () => {}) 写完之后的通知事件
    • drain 触发的条件
      • 1.必须达到预期或者超过预期
      • 2.内存中的内容全部清空后
  • 文件特有的 ws.open ws.close

下面三个是并发的,但是内部会维护一个链表,顺序是固定的,内部会维护一个变量,这个变量会统计写入的个数,当达到 highWaterMark 时,会返回 false,内容写入后,会在统计的数量的基础上减少

let flag = ws.write("h", () => {
    console.log("成功1");
});
console.log("是否符合预期--->", flag);
flag = ws.write("ello kaimo", () => {
    console.log("成功2");
});
console.log("是否符合预期--->", flag);
// ws.end("!!!", () => {
//     console.log("成功3");
// });
ws.on("drain", () => {
    console.log("drain--->");
});

在这里插入图片描述

在这里插入图片描述

例子:实现写入10个数,只占用一个字节的内存

如果直接按照下面的写法,一口气放入内存中,第一次写入只有一个0,但是还有9个在内存里,由一个链表保持写入的顺序不乱

let ws2 = fs.createWriteStream(path.resolve(__dirname, "./54/number.txt"), {
    highWaterMark: 1, 
});
for (let i = 0; i < 10; i++) {
    ws2.write(i + "");
}

下面利用 flag 来改造一下

let ws2 = fs.createWriteStream(path.resolve(__dirname, "./54/number.txt"), {
    highWaterMark: 1, 
});
let numberIndex = 0;
function write() {
    let flag = true; // 是否可以写入
    while (flag && numberIndex < 10) {
        flag = ws2.write(numberIndex + "");
        numberIndex++;
    }
    if (numberIndex === 10) {
        ws2.end("!!");
    }
}
write();
ws2.on("drain", () => {
    console.log("ws2---drain--->");
    write();
});
ws2.on("close", () => {
    console.log("ws2---close--->");
});

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

确认应答机制与超时重发机制【TCP原理(笔记一)】

文章目录 通过序列号与确认应答提高可靠性正常的数据传输数据包丢失的情况确认应答丢失的情况发送的数据 重发超时如何确定 通过序列号与确认应答提高可靠性 在TCP中&#xff0c;当发送端的数据到达接收主机时&#xff0c;接收端主机会返回一个已收到消息的通知。这个消息叫做…

TCP的三次握手以及以段为单位发送数据【TCP原理(笔记二)】

文章目录 连接管理TCP以段为单位发送数据 连接管理 TCP提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。 UDP是一种面向无连接的通信协议&#xff0c;因此不检查对端是否可以通信&#xff0c;直接将UDP包发送出去。TCP与此相反&am…

2023-07-16:讲一讲Kafka与RocketMQ中零拷贝技术的运用?

2023-07-16&#xff1a;讲一讲Kafka与RocketMQ中零拷贝技术的运用&#xff1f; 答案2023-07-16&#xff1a; 什么是零拷贝? 零拷贝(英语: Zero-copy) 技术是指计算机执行操作时&#xff0c;CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输…

layui的基本使用-Helloworld 三把斧的一把斧头的熟练起来

该笔记记录如何使用layui的模块化方法。 访问layui官网 Layui - 极简模块化前端 UI 组件库下载官网的layui压缩包文件&#xff0c;解压到本地文件夹&#xff0c;文件结构如下&#xff1a; vscode创建项目&#xff1b; 位置 测试写了三个文件夹&#xff0c;才测试出来bug 坑所在…

【深度学习笔记】偏差与方差

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记&#xff0c;视频由网易云课堂与 deeplearning.ai 联合出品&#xff0c;主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习&#xff0c;视频的链接如下&#xff1a; 神经网络和…

JAVASE-Java概述与环境搭建(一)

文章目录 一.内容摘要二.引言2.1.何为编程&#xff1f;2.2.什么是计算机编程语言&#xff1f;2.3.编程语言发展史2.3.1.打孔机2.3.2.汇编语言2.3.3.高级语言2.3.3.1.C语言2.3.3.2.C语言2.3.3.3.PHP语言2.3.3.4. .NET语言2.3.3.5. Ruby2.3.3.6. python2.3.3.7. Java 2.3.4.编程语…

代码随想录算法训练营之JAVA|第四天| 24. 两两交换链表中的节点

今天是第 天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天。 算法挑战链接 力扣http://24. 两两交换链表中的节点 第一想法 看到题目的第一想法是交换节点&#xff0c;于是赶紧拿出草稿本画了出来。这不简简单单。 1 -> 2 ->3 ->..... 已有的条件&#x…

WAF相关知识及安全狗的部署和绕过

文章目录 一&#xff1a;WAF基础知识&#xff08;一&#xff09; WAF简介&#xff08;二&#xff09; WAF工作原理1&#xff09; 流量识别2&#xff09; 攻击检测3&#xff09; 攻击防御4&#xff09; 记录日志 &#xff08;三&#xff09; WAF分类&#xff08;四&#xff09; …

云原生|kubernetes|kubernetes集群部署神器kubekey的初步使用(centos7下的kubekey使用)

前言: kubernetes集群的安装部署是学习kubernetes所需要面对的第一个难关&#xff0c;确实是非常不好部署的&#xff0c;尤其是二进制方式&#xff0c;虽然有minikube&#xff0c;kubeadm大大的简化了kubernetes的部署难度&#xff0c;那么&#xff0c;针对我们的学习环境或者…

[Linux笔记]常见命令(持续施工)

常见命令 文件与目录命令 pwd 打印当前所在路径。 建议每次登录后&#xff0c;或长时间未操作时&#xff0c;进行操作前都先执行pwd以确认当前位置。 cd 进入指定目录(change direct) .当前路径 ..上级路径 windows下&#xff0c;\为路径分隔符 Linux下&#xff0c;/为路径…

4.6.tensorRT基础(1)-实际模型上onnx文件的各种操作

目录 前言1. onnx1.1 读取节点1.2 修改节点1.3 替换节点1.4 删除节点1.5 修改input和output1.6 预处理的接入 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#…

在if/else中进行函数声明

console.log("第一次输出a: ", a) //输出 本地a if (true) {// 这里js隐式的把function a的定义放到这里来了&#xff0c;此刻这里有一个 块aa 1 // 将 块a的值 由函数修改为1console.log("第二次输出a: ",a) // 此时输出的是 块a的值function a() {} // …

【Kubernetes运维篇】RBAC之准入控制器详解

文章目录 一、ResourceQuota准入控制器1、ResourceQuota是什么&#xff1f;2、限制CPU、内存、Pod数量、Deployment数量3、限制存储空间大小 二、LimitRanger准入控制器1、LimitRanger是什么&#xff1f;2、LimitRanger限制案例 一、ResourceQuota准入控制器 中文官方参考文档…

前端Vue仿美团右侧侧边栏弹框筛选框popup alert

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…

Linux dpkg和dpkg-deb常用参数使用说明

名词解释 “dpkg ”是“ Debian Packager ”的简写。为“Debian” 专门开发的套件管理系统&#xff0c;方便软件的安装、更新及移除。所有源自“Debian”的“Linux ”发行版都会使用 “dpkg”&#xff0c;例如 “ Ubuntu ”、“Knoppix ”等。 dpkg-deb和dpkg的区别 dpkg-de…

golang使用bcrypt包对密码进行加密

bcrypt bcrypt是一个由美国计算机科学家尼尔斯普罗沃斯&#xff08;Niels Provos&#xff09;以及大卫马齐耶&#xff08;David Mazires&#xff09;根据Blowfish加密算法所设计的密码散列函数&#xff0c;于1999年在USENIX中展示。实现中bcrypt会使用一个加盐的流程以防御彩虹…

深入理解Windows操作系统机制(四)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。 我们每天都在用Windows操作系统&#xff0c;但是其实我们每天直接在打交道的并不是Windows操作系统的内核&#xff0c;而是Windows操作系统…

H3C-Cloud Lab实验-PPPoE实验

实验拓扑图&#xff1a; 实验需求&#xff1a; 1. 如图&#xff0c;私网内部配置为 192.168.1.0/24 网段&#xff0c;R2 上配置 Loopback0 口模拟互联网地址 2. 配置 R2 为 PPPoE Server&#xff0c;为 R1 提供 PPPoE 拨号服务&#xff0c;并为 R1 自动分配公网 IP 地址 3. …

【unity之IMGUI实践】抽象父类继承实现【三】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

Bypass!Burp分块传输绕WAF插件

插件简介 本插件主要用于分块传输绕WAF&#xff0c;不了解分块传输绕WAF的可阅读作者这篇文章&#xff1a;【第8周】编写Burp分块传输插件绕WAF 。 关注【Hack分享吧】公众号&#xff0c;回复关键字【230605】获取下载链接 插件使用 延时分块传输