理解Buffer

  Buffer对象是Node.js用来处理二进制数据的一个接口。JavaScript比较擅长处理Unicode数据,对于处理二进制格式的数据(比如TCP数据流),就不太擅长。Buffer对象就是为了解决这个问题而提供的。该对象也是一个构造函数,它的实例代表了V8引擎分配的一段内存,基本上是一个数组,成员都为整数值。

一、Buffer结构

  buffer是一个像Array的对象,但它主要用于操作字节。下面我们从模块结构的对象结构的层面上来认识它。

  1.模块结构

  Buffer是一个典型的javascript与C++结合的模块,它将性能相关部分用C++实现,将非性能相关的部分用javascript实现。

  Buffer所占用的内存不是通过V8分配的,属于堆外内存。由于V8垃圾回收性能的影响,将常用的操作对象用更高效和专有的内存分配回收策略来管理是个不错的思路。

  由于Buffer太过常见,Node在进程启动时就已经加载了它,并将其放在全局对象(global)。所以在使用Buffer时,无须通过require()即可直接使用。

二、Buffer对象

  Buffer对象类似于数组,它的元素为16进制的两位数,即0到255的数值。示例代码:

var str = "深入浅出node.js";
var buf = new Buffer(str,‘utf-8‘);
console.log(buf);
//=>  <Buffer e6 b7 b1 e5 85 a5 e6 b5 85 e5 87 ba 6e 6f 64 65 2e 6a 73>
时间: 2024-10-15 06:44:26

理解Buffer的相关文章

2015-01-27-从实验出发理解buffer与cache区别-吴伟顺

通过du(find) 与 cat 体现buffer与cache差异实验: 实验表明: 1 通常 buffer << cache 2 "文件系统"相关内容(inode等)缓存在buffer,"文件系统"无关的(即文件内容)缓存在cache 同: 目的:提高linux的IO效率 属性:对程序是透明的 (everything is a file in linux) IO层:缓存在内存的其他慢IO层的数据. (IO : 网络 < 磁盘 < 内存 &l

Nodejs&#183;理解Buffer

Node里面的Buffer其实就是用于网络请求.文件读取等等操作,而且是分配在堆外,不会占用堆内的内存,这也是因为本来V8的内存就很小,如果读取大文件,那就...... 之前有看过Logstash的Buffer源码,感觉比这个高级多了....而Ruby中的Buffer则有点缓存的性质,支持大小的限制,以及定时刷新等等... 看来Buffer就是解决了V8之前应用于浏览器端偏小内存的限制,而直接在底层堆外申请大内存,但是又怕现用现申请增加CPU负载,所以采用了分块申请的形式. 另外Buffer中统

深入浅出Node.js (6) - 理解Buffer

6.1 Buffer结构 6.1.1 模块结构 6.1.2 Buffer对象 6.1.3 Buffer内存分配 6.2 Buffer的转换 6.2.1 字符串转Buffer 6.2.2 Buffer转字符串 6.2.3 Buffer不支持的编码类型 6.3 Buffer的拼接 6.3.1 乱码是如何产生的 6.3.2 setEncoding()与string_decoder() 6.3.3 正确拼接Buffer 6.4 Buffer与性能 6.5 总结 6.6 参考资源

[转]nodejs深入学(7)理解Buffer

原文: https://www.jianshu.com/p/e3f14cdf78f1 ----------------------------------------------------------- 前言 因为在node中需要处理网络协议.操作数据库.处理图片.接受上传文件,因此,需要大量操作二进制数据,虽然js对于字符串支持良好,但是由于需要对于字符串进行序列化,因此,就有必要了解一下Buffer,对,没错,Buffer其实是二进制数据模块. 另外,本章将不是ES的范畴,本章定义的内容都

Java NIO系列教程(三) Buffer

原文链接:http://ifeve.com/buffers/ 声明:Java NIO系列教材并非本人原创,只因阅读原文之后有感于文章之精妙,意欲与诸位共享,故而出此下策,忘原作者见谅.另附上原文地址. Java NIO的通道类似流,但又有些不同: Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问

Java NIO Buffer

Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.交互图如下: 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存. 下面是NIO Buffer相关的话题列表: 1.Buffer的基本用法 使用Buffer读写数据一般遵循以下四个步骤: 写入数据到Buffer 调用flip()方法 从Buffer中读取数据 调用clear()方法或者com

Java NIO系列教程(三) Buffer(转)

Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存. 下面是NIO Buffer相关的话题列表: Buffer的基本用法 Buffer的capacity,position和limit Buffer的类型 Buffer的分配 向Buffer中写数据 flip()方法 从Buffer中读取数据

缓存系列之一:buffer、cache与浏览器缓存

一:缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的作用,比如CPU的一级.二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且硬盘也有大小不一的缓存,甚至是物理服务器的raid 卡有也缓存,都是为了起到加速CPU 访问硬盘数据的目的,因为CPU的速度太快了,CPU需要的数据硬盘往往不能在短时间内满足CPU的需求,因此PCU缓存.内存.Raid 卡以及硬盘缓存就在一定程度上满足了CPU的数据需求,即CPU

《Java源码分析》:Java NIO 之 Buffer

<Java源码分析>:Java NIO 之 Buffer 在上篇博文中,我们介绍了Java NIO 中Channel 和Buffer的基本使用方法,这篇博文将从源码的角度来看下Buffer的内部实现. 在Java API文档中,对Buffer的说明摘入如下: Buffer:是一个用于特定基本数据类型的容器.这里的特定基本数据类型指的是:除boolean类型的其他基本上数据类型. 缓冲区是特定基本数据类型元素的线性有限序列.除内容外,缓冲区饿基本属性还包括三个重要的属性,如下: 1.capaci