Fs流读取和写入数据

使用文件流来读取大文件不会卡顿

1, 从流中读取数据

var fs = require("fs");

var data = '';

var count = 0;

// 创建可读流

var readerStream = fs.createReadStream('t.txt');

// 设置编码为 utf8。

readerStream.setEncoding('UTF8');

// 处理流事件 --> data, end, and error

readerStream.on('data', function(chunk) {

data += chunk;

count++

});

readerStream.on('end',function(){

console.log(data);

console.log(count);      //count:读取次数

});

readerStream.on('error', function(err){

console.log(err.stack);

});

console.log("程序执行完毕");

2, 写入流

var fs = require("fs");

var data = ' ----- 数据库数据 ----- ';

// 创建一个可以写入的流,写入到文件 t.txt 中

var writerStream = fs.createWriteStream('t.txt');

// 使用 utf8 编码写入数据

writerStream.write(data,'UTF8');

// 标记文件末尾

writerStream.end();

// 处理流事件 --> data, end, and error

writerStream.on('finish', function() {

console.log("写入完成。");

});

writerStream.on('error', function(err){

console.log(err.stack);

});

console.log("程序执行完毕");

3, 管道流

var fs = require('fs')

var readerStream = fs.createReadStream('t.txt')

// 1,覆盖原来内容

// var writerStream = fs.createWriteStream('pipe.txt')

// 2.原内容后追加

var writerStream = fs.createWriteStream('pipe.txt',{ 'flags': 'a' })

readerStream.pipe(writerStream)

console.log('管道输送完成')

4, 链式流

链式是通过连接输出流到另外一个流并创建多个流操作链的机制。链式流一般用于管道操作。

接下来我们就是用管道和链式来压缩和解压文件。

创建 compress.js 文件, 代码如下:

var fs = require("fs");

var zlib = require('zlib');

// 压缩 input.txt 文件为 input.txt.gz

fs.createReadStream('input.txt')

.pipe(zlib.createGzip())

.pipe(fs.createWriteStream('input.txt.gz'));

console.log("文件压缩完成。");

代码执行结果如下:

$ node compress.js

文件压缩完成。

执行完以上操作后,我们可以看到当前目录下生成了 input.txt 的压缩文件 input.txt.gz。

接下来,让我们来解压该文件,创建 decompress.js 文件,代码如下:

var fs = require("fs");

var zlib = require('zlib');

// 解压 input.txt.gz 文件为 input.txt

fs.createReadStream('input.txt.gz')

.pipe(zlib.createGunzip())

.pipe(fs.createWriteStream('input.txt'));

console.log("文件解压完成。");

代码执行结果如下:

$ node decompress.js

文件解压完成。

nodeks —— fs模块 —— 从流中 读取和写入数据的更多相关文章

  1. 一些常用的文本文件格式(TXT,JSON,CSV)以及如何从这些文件中读取和写入数据

    TXT文件: txt是微软在操作系统上附带的一种文本格式,文件以.txt为后缀. 从txt文件中读取数据: with open ('xxx.txt') as file: data=file.readl ...

  2. c语言链表从本地文件中读取和写入数据

    1 typedef struct Data{ 2 40 char *name; 3 41 char *IDCARD; 4 42 char *job_id; 5 43 char *length; 6 4 ...

  3. 从PCD文件中读取点云数据

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=84 在本小节我们学习如何从PCD文件中读取点云数据. 代码 章例1文件夹中, ...

  4. 大规模的I/O流中有效识别大数据并增强时间局部性

    一篇热数据识别存储外文翻译,本文主要在讲思想 原文题目:  HDCat: Effectively Identifying Hot Data in    Large-scale I/O Streams ...

  5. Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文件,写入新数据

    背景 Python中,想要打开已经存在的excel的xls文件,然后在最后新的一行的数据. 折腾过程 1.找到了参考资料: writing to existing workbook using xlw ...

  6. Hadoop源代码分析:HDFS读取和写入数据流控制(DataTransferThrottler类别)

    DataTransferThrottler类别Datanode读取和写入数据时控制传输数据速率.这个类是线程安全的,它可以由多个线程共享. 用途是构建DataTransferThrottler对象,并 ...

  7. File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?

    重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...

  8. C# 从 UTF-8 流中读取字符串的正确方法

    我们下面的代码是从一个流 stream 中读取 UTF-8 编码的字符串.我们可以先考虑一下其中存在的潜在问题. string ReadString(Stream stream) { var sb = ...

  9. php中读取以及写入文件的方法总结

    ==>读取文件内容(方法一) $fileData = fread($fileStream,filesize($filePath)); 注意: 文本文件读取到网页上显示时,由于换行符不被解释,文本 ...

随机推荐

  1. ssm 框架 使用ajax异步,实现登陆

    只是简单写一下 js.jsp.和controller jsp <%@ page contentType="text/html;charset=UTF-8" language= ...

  2. Linux--如何实现虚拟机与主机之间的文件传输无需第三方,即可轻松设置共享文件夹(适合所有人群)

    无需第三方插件,设置共享文件夹 第一步:虚拟机->设置 第二步:选项->共享文件夹->总是启用->添加 第三步:点击下一步 第四步:浏览(选择主机路径)->下一步 第五步 ...

  3. C++ class without pointer members

      写在前面 Object Oriented class 的分类:带指针的class和不带指针的class, class 的声明         这里有一个inline的概念,写在类里面的默认为inl ...

  4. uniGUI之TUniHiddenPanel(14)

    TUniHiddenPanel是将不在界面上显示的  容器  控件.  只有uniDBGrid实际列才有对应的编辑控件,如果是外键列则无法设置 编辑控件. 里面的控件将不会 显示.将控件放入其中即可. ...

  5. Python的类(class)和实例(Instance)如何操作使用

    面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...

  6. php 增删改查范例(3)

    编辑页面edit.php: <?php$id=$_GET['id'];$db= new mysqli('localhost','root','root','db_0808');$sql=&quo ...

  7. 使用anaconda 3安装tensorflow 1.15.0 (win10环境)

    0.写在前面 ​ 之前其实安装过一次tensorflow,但是由于电脑中毒,重装了系统,把所有的环境全部删除了.之前在博客里转发了一篇别人在win10安装tensorflow的教程,但是版本比较旧了, ...

  8. Go语言 | 哪些大公司在用go语言?

    Go大概09年面世以来,已经8年了,也算是8年抗战.在这8年中,已经有很多公司开始使用Go语言开发自己的服务,甚至完全转向Go开发,也诞生了很多基于Go的服务和应用,比如Dokcer.k8s等,现在我 ...

  9. 「SP2713」GSS4 - Can you answer these queries IV

    传送门 Luogu 解题思路 区间开方以及区间求和. 考虑用线段树来做. 开方操作看似没有任何结合律可言,但这题有另外一个性质: 一个数的初始值不超过 \(10^{18}\) ,而这个数被开方6次左右 ...

  10. Spring框架的配置文件

    Spring框架的配置文件 (2014-12-18 20:43:42) 转载▼ 标签: 配置文件 例子 构造函数 成员 spring 分类: 专业知识 (注:文中的"<"均需 ...