首先必须先要了解Buffer,Buffer是js和c++的结合体,类数组,通常与Stream一起用:

1.

(1).Buffer是个类,因此可以构建成对象

(2).buf具有数组的性质

字符串转换成二进制:

(1)通常用Buffer来构建二进制

new Buffer(string,[encodding])  默认是utf-8  //中文一个字是3个字节

buf对象之间的encodding相互转换

buf.write(string,[encodding])

(2)buf转为字符串

buf.toString([encodding])

buf += chunk   //这是一种默认的转换,会将二进制转为字符串,默认是utf-8

因为buf在转换成string时,中文是3个字节,如果不是宽字节编码时,就会截断一部分buf,造成乱码

(3)buffer的拼接(buffer的应用中一般是一段一段的传输的),一般用在两种情况下

(1) var rs = fs.createReadStream()

rs的data事件,是一段一段读的

rs.on('data',function(chunk){})

(2)网络请求中,res.on('data',function(chunk){})

拼接中用: 

  var rs = fs.createReadStream('./test.txt');
  var chunks = [];
  rs.on('data', function (chunk) {
    chunks.push(chunk);
  });
  rs.on('end', function () {
    var buf = Buffer.concat(chunks);
    var str = buf.toString()
  });

(4)对文件读取时以及网络请求的优化

(1)网络中优化

node可以将静态的文件转换成二进制的内容,将二进制的内容返回,可将性能大幅度提高.

同时将二进制采用zlib进行压缩

(2)文件读取的优化

fs.readFile与fs.createReadStream的区别:

      fs.readFile是一次将读取的内容存到内存中

      fs.createReadStream是从磁盘中读一点,放到内存中,先在内存中准备一段Buffer,然后调用fs.read()读取时逐步复制到Buffer中.因此调用fs.read()则调用一次磁盘读取.

        fs.createReadStream(path,opts)       其中:highWaterMark设置为64*1024这样可保证速度

(5)采用压缩,判断压缩类型:

stream数据流的更多相关文章

  1. 浅谈stream数据流

    汴水流,泗水流,流到瓜州古渡头, 吴山点点愁.    我们知道水是源源不断的, 抽刀断水水更流, 斩不断, 理还乱,  是水流.(技术贴, 本文权当读者没学过古诗). 在一些语言里, 我们的前辈把数据 ...

  2. [LeetCode] 295. Find Median from Data Stream ☆☆☆☆☆(数据流中获取中位数)

    295. Find Median from Data Stream&数据流中的中位数 295. Find Median from Data Stream https://leetcode.co ...

  3. JDK8 Stream 数据流效率分析

    JDK8 Stream 数据流效率分析 Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型: Stream<T> ...

  4. [LeetCode] Kth Largest Element in a Stream 数据流中的第K大的元素

    Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...

  5. java8中Stream数据流

    筛选重复的元素 Stream 接口支持 distinct 的方法, 它会返回一个元素(根据流所生成元素的 hashCode和equals方法实现)的流. 例如,以下代码会筛选出列表中所有的偶数,并确保 ...

  6. [leetcode]295. Find Median from Data Stream数据流的中位数

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  7. 295 Find Median from Data Stream 数据流的中位数

    中位数是排序后列表的中间值.如果列表的大小是偶数,则没有中间值,此时中位数是中间两个数的平均值.示例:[2,3,4] , 中位数是 3[2,3], 中位数是 (2 + 3) / 2 = 2.5设计一个 ...

  8. Leetcode703.Kth Largest Element in a Stream数据流中的第K大元素

    设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中 ...

  9. Leetcode 703. 数据流中的第K大元素

    1.题目要求 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器, ...

随机推荐

  1. HDU5880 Family View(2016青岛网络赛 AC自动机)

    题意:将匹配的串用'*'代替 tips: 1 注意内存的使用,据说g++中指针占8字节,c++4字节,所以用g++交会MLE 2 注意这种例子, 12abcdbcabc 故失败指针要一直往下走,否则会 ...

  2. Knockout.js随手记(5)

    以列表方式呈现数据  处理以数组形式储存的多条数据,要先认识foreach.在ViewModel定义一个JavaScript Array或是ko.observableArray() (observab ...

  3. Tomcat中JVM内存溢出及合理配置及maxThreads如何配置(转)

    来源:http://www.tot.name/html/20150530/20150530102930.htm Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚 ...

  4. Oracle两列字段替换和复制

  5. 前台json 的一些 处理 (转)

    JS解析json数据并将json字符串转化为数组的实现方法 转自(http://www.jb51.net/article/32795.htm) <!DOCTYPE HTML PUBLIC &qu ...

  6. 常见的几个Python面试题

    str = "abcdaab" #字符串反转 print str[::-1] #统计str字符串中出现'a'的次数 print str.count('a') #pyhon可以用+作 ...

  7. OS X El Capitan的 U 盘制作过程

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书”     0.在 AppStore 下载 OS X El Capitan AppStore ...

  8. Swagger - 前后端分离后的契约

    前后端分离 按照现在的趋势,前后端分离几乎已经是业界对开发和部署方式所达成的一种共识.所谓的前后端分离,并不是传统行业中的按部门划分,一部分人只做前端(HTML/CSS/JavaScript等等),另 ...

  9. 【Redis】简介与安装

    Linux 安装 [root@redis ~]# wget http://download.redis.io/releases/redis-2.8.19.tar.gz 解压缩redis[root@ha ...

  10. phpcmsv9多表联合查询分页功能实现

    phpcms v9里面自带的listinfo分页函数蛮好用的,可惜啊.不支持多表查询并分页. 看了一下前台模板层支持get标签,支持多表查询,支持分页.刚好可以把这个功能搬到后台来使用. 我们现在对g ...