深入浅出node读书笔记(四)

  本篇文章介绍Buffer相关的概念。前端JavaScript对字符串的操作相对友好,有一系列比较好用的api来操作字符串。但是如果把js挪到后端,这些api明显不够,因为node在处理的时候需要大量处理一些二进制文件,前端那些api是远远不足的,于是buffer对象应运而生。

  首先,buffer模块在node启动的时候已经自动加载进去了,无需require()进去。

  (1)buffer对象类似数组,它的元素是16进制的两位数,都在0~255之间。用.length属性能够得到buffer的长度。我们在把字符串转为buffer对象之后,是能够设置buffer[]里面的值的,如果设置范围不在0~255之间,node会自动+(-)256来规范数值,如果是小数则舍弃小数部分。

  (2)buffer的内存分配。

    该分配取决于buffer对象的大小,该大小以8kb来界定,小于8k的为小buffer,这也是操作系统的slab动态内存分配机制:slab是一块已经申请好的内存块,如果是小buffer对象,则会把对象分到一个slab中,如果slab没满,就继续放,如果slab剩下的空间不足以放一个buffer对象,则会启用下一个slab,之前的slab剩余被浪费掉。如果是一个超过8kb的大buffer对象,操作系统将会分配一个slowBuffer对象作为slab来被大buffer对象独立占据。

  (3)buffer转换:

    字符串转buffer

var str=‘我是谁‘;
var str2=‘abcde‘;
var buf=new Buffer(str,‘utf-8‘);
//buffer对象可能是多次写入
buf.write(str2);

    buffer转字符串:转化过程中因为截取buffer原因会出现乱码。

buf.toString();

   (4)buffer的拼接:

var fs = require(‘fs‘);
var rs = fs.createReadStream(‘test.md‘);
var data = ‘‘;
rs.on("data", function (chunk){
    data += chunk; //此处隐藏data与chunk的toString()操作
});
rs.on("end", function () {
    console.log(data);
});

    在外语中这样操作没问题,但如果是中文,每个汉字转化为三个buffer二进制值,就会因截取的任意性而在tostring的过程中转化为乱码,这也就是乱码产生的原因。

  (5)解决乱码的方法:此处只介绍一种较通用的方法:把一些小的buffer对象拼接成一个buffer对象,一次性转码。

    

var chunks = [];
var size = 0;
res.on(‘data‘, function (chunk) {
  chunks.push(chunk);
  size += chunk.length;
});
?res.on(‘end‘, function () {
  var buf = Buffer.concat(chunks, size);
  var str = iconv.decode(buf, ‘utf8‘);
  console.log(str);
});

  chunks数组每次把读取的buf对象chunk加入到数组中,然后记录下总length。然后通过Buffer.concat(chunks,size)来把小的buf对象拼接成一个大的,然后转码即不会出现乱码。

  (6)buffer与性能:静态内容转为为buffer对象形式在网络中传输速度较快,效率高。

    在文件读取的时候,我们会设置一些属性,其中有一个highWaterMark属性,该属性决定读取文件的速度,表示每次从文件中读出多少字节。

    fs.createReadStream()的工作????方式是在内??中????一??Buffer,??后在fs.read()读??取文件时候将字节复制??到Buffer中。????完成一次读取操作,??从这个Buffer中??通过slice()????????方法取出一部分数据??作为一个小Buffer对??像,通????过data事件??????????传递给调用方。如果Buffer用完,重新申请一个,没用完则接着用。

      

时间: 2024-08-10 15:11:48

深入浅出node读书笔记(四)的相关文章

深入浅出node读书笔记(一)

老早就想读这本书了,可是因为这样那样的原因,总归是耽搁了,前几天一直在纠结毕业设计用什么语言来实现后端逻辑代码的问题,通过一周时间的痛苦挣扎,选择了node,于是就又开始学习node了,希望写随笔这种形式能够逼着我把node好好研究一遍. 首篇文章主要讲述该书的第一个章节,因为是读书笔记,内容可能不会很全面,大概只会写下我认为重要的东西,一些无关紧要的内容可能略过.本篇文章主要从两个方面来介绍node,分别是:node的特点以及node的使用场景. (1)node的特点: a)异步I/O:异步I

深入浅出node读书笔记(三)

介绍完了node的模块机制,现在来说说node的一个非常有名的特色:异步I/O. (1)首先我们先要了解一下node自身的执行模型:事件循环.它使得回调函数十分普遍.在启动进程的时候,node创建一个类似于while(true)循环的循环体,每执行一次循环体我们成为一次tick.每个tick的过程就是查看是否有事件需要处理,如果有就看它是否有关联的回调函数,如果有,就执行回调函数,没有就进入下一个循环.直到没有事件为止,就退出流程. 此外,每个事件循环均有一个或者多个观察者,node可向其询问是

深入浅出node读书笔记(五)

本篇文章说说JavaScript在v8引擎里面内存管理的相关问题. (1)从本质来讲,node是基于v8引擎才开发出来的,v8在给node带来一系列有点之余,也带来了一些缺陷,比如内存限制就是一个方面.因为v8的限制,node在64位机器下只能使用1.4G的内存,在32位机器下更是只能使用0.7G.v8进行内存限制是为了防止在垃圾回收时候所用时间过长导致卡顿.这在文章下边会有介绍. (2)所有的JavaScript对象都是通过堆来进行内存分配的,v8在最开始的时候有一个申请好的一块堆内存,创建j

深入浅出Nodejs读书笔记

深入浅出Nodejs读书笔记 转:http://tw93.github.io/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html category:node学习笔记       2015-03-01 今天终于把朴灵老师写的<深入浅出Node.js>给学习完了, 这本书不是一本简单的Node入门书籍,它没有停留在Node介绍或者框架.库的使用层面上,而是从不同的视角来揭示Node自己内在的特点和结构.建议有一定Node基础或者做过No

R实战读书笔记四

第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括如下. 一图胜千字,人们从视觉层更易获取和理解信息. 图形工作 R具有非常强大的绘图功能,看下面代码. > attach(mtcars) > plot(wt, mpg) > abline(lm(mpg~wt)) > title("Regression of MPG on Weight") > detach(m

悟道—位IT高管20年的职场心经(读书笔记四)

悟道--一位IT高管20年的职场心经 第四章 人情练达即文章 "问世间情为何物,直教人生死相许" 那是说的爱情. 职场中的人情实在没那么浪漫, 很多时候是冷冰冰的, 但是你必须去面对, 以积极的.正面的心态去面对. 不但要面对,还要苦心经营. 1.1  谁都别惯着:下属不能惯 学会安排事情,分担事情. 1.2  谁都别惯着:老板不能惯 怎么样去和不同性格的老板交流,老板也有他自己的不足的地方,在这种情况下,最好是自己有自己的解决问题的方法. 1.3  谁都别惯着:客户不能惯 对客户,有

《高效能程序员的修炼》读书笔记四

第一章第三节:如何培养写作习惯 -------------------------------- 我个人一直坚信要成为一名优秀的程序员,其实和写代码是没有多大关系的(刚好本书作者也是这样的想法).当然,作为一名程序员的话,具有一定水平的技术能力还是需要的.但,个人觉得更重要的是良好地沟通技巧. 本书作者的合伙人Joel Spolsky有过这样一段话: 杰出的程序员跟勉强过得去的程序员之间的差别,不在于他们掌握了多少种编程语言,也不在于他们谁更擅长Python或Java.真正的关键是,他们能不能把

《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构

一.网站性能测试 (1)性能测试指标:①响应时间:②并发数:③吞吐量:④性能计数器: (2)性能测试方法:①性能测试:②负载测试:③压力测试:④稳定性测试: (3)性能优化策略: ①性能分析:检查请求处理各个环节的日志,分析哪个环节响应时间不合理,检查监控数据分析影响性能的因素: ②性能优化:Web前端优化,应用服务器优化,存储服务器优化: 二.Web前端性能优化 (1)浏览器访问优化: ①减少http请求:因为http是无状态的,每次请求的开销都比较昂贵(需要建立通信链路.进行数据传输,而服务

深入浅出Nodejs读书笔记(转)

原文来自我的博客:http://tw93.github.io/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html 今天终于把朴灵老师写的<深入浅出Node.js>给学习完了, 这本书不是一本简单的Node入门书籍,它没有停留在Node介绍或者框架.库的使用层面上,而是从不同的视角来揭示Node自己内在的特点和结构.建议有一定Node基础或者做过Node方面的小项目的同学阅读,看完以后你的思维会有很奇特的碰撞,我看的时候就常常会有这样