虽然知道了怎么实例化Buffer,但这还远远不够,因为Buffer类使随nodejs一起发布的核心库,Buffer不仅能处理tcp连接中发送接收的数据,也能处理图像或者是压缩文件,甚至说文件系统里面的数据,包括网络中二进制数据流,只要是nodejs中能处理的io操作中都可能用到buffer,那么具体要怎么用
要学会Buffer的使用,一部分是Buffer的实例化,一部分是实例化后buffer对象的处理,Buffer实例化上一节已经了解过了
 
Buffer静态方法
Buffer
{ [Function: Buffer]
poolSize: 8192,
from: [Function],
alloc: [Function],
allocUnsafe: [Function],
allocUnsafeSlow: [Function],
isBuffer: [Function: isBuffer],
compare: [Function: compare],
isEncoding: [Function],
concat: [Function],
byteLength: [Function: byteLength],
[Symbol(node.isEncoding)]: [Function] }
从上面可以看出Buffer是一个构造函数,同时他也是一个对象
poolSize:内存载体的容量
静态方法isBuffer:判断对象是否是Buffer类型对象,很多时候需要判断数据类型,才会有对应后续的操作
compare:用来判断两个对象的相对位置,一般来做按字符串的排序
isEncoding:判断nodejs是否支持某种编码,像中文处理这种,只能使用utf-8这种编码,对于gbk这种是无法解析的
concat:将几个Buffer对象,链接创建一个新的buffer对象
bytelength:获得指定编码下字符串所占的字节数
Buffer实例方法
buffer.write(string,offset=0,length,encoding='utf8');
string:一定要传的,也就是要写入的字符串
offset:用来指定字符串转化为字节数据后的写入的位置
length:写入的长度,
encoding:指定写入字符串的编码格式,默认是utf8
> var buf = new Buffer('hello every');
undefined
> buf.length
11
> buf.write('hi every')
8
> buf.toString()
'hi everyery'
> buf.length
11
这个长度依然是11,说明这个buffer在初始化的时候就已经被指定,无论你怎么去改,这个长度是不变的,这就是如果没有传offset的值的话,就是从第0为覆盖掉之前的数据,
> buf.write(' everyeveryevery',2,16);
9
> buf.toString()
'hi everyev'
我们看到打印出来的还是11位数,然后从之前的第二位开始被覆盖成新的字符串,知道11位,就不显示了
buffer.copy(target,tStart,tStart,sEnd=buffer.length);
target:必须要传的,用来指定复制的目标buffer
tStart:指定目标buffer对象中从第几个字节开始写,默认的值是0
tStart:用来指定原buffer里面获取数据的开始位置,默认的值也是0
sEnd:指从复制源对象里面获取数据的结束位置,默认值是buffer对象的长度
> var buf = new Buffer('hello every')
undefined
> buf.length
11
> var buf2 = new Buffer(5)
undefined
> buf.copy(buf2)
5
> buf2.toString()
'hello'
> buf.toString()
'hello every'
buf2打印出来的数是hello,默认从0位开始,那传上这个参数,从第6为开始,到第11位结束
> buf.copy(buf2,0,6,11)
5
> buf2.toString()
'every'

Buffer的使用的更多相关文章

  1. Node.js:Buffer浅谈

    Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...

  2. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  3. 一点公益商城开发系统模式Ring Buffer+

    一个队列如果只生产不消费肯定不行的,那么如何及时消费Ring Buffer的数据呢?简单的方案就是当Ring Buffer"写满"的时候一次性将数据"消费"掉. ...

  4. CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总

    CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总 开始 总的来说,OpenGL应用开发者会遇到为如下三种数据创建Vertex Buffer Object的情形: ...

  5. golang bytes.Buffer Reset

    func t() { a := []'} buf := new(bytes.Buffer) buf.Write(a) b := buf.Bytes() fmt.Println(b) buf.Reset ...

  6. 使用Ring Buffer构建高性能的文件写入程序

    最近常收到SOD框架的朋友报告的SOD的SQL日志功能报错:文件句柄丢失.经过分析得知,这些朋友使用SOD框架开发了访问量比较大的系统,由于忘记关闭SQL日志功能所以出现了很高频率的日志写入操作,从而 ...

  7. directx12中vetex buffer、index buffer和constant buffer绑定piple line的时机

    类别 时机 函数 建Heap vetex buffer 在Draw函数中 ID3D12GraphicsCommandList::IASetVertexBuffer 否 index buffer 在Dr ...

  8. JAVA NIO Buffer

    所谓的输入,输出,就是把数据移除或移入缓冲区.   硬件不能直接访问用户控件(JVM). 基于存储的硬件设备操控的是固定大小的数据块儿,用户请求的是任意大小的或非对齐的数据块儿.   虚拟内存:使用虚 ...

  9. Circular Buffer

    From:http://bradforj287.blogspot.com/2010/11/efficient-circular-buffer-in-java.html import java.util ...

  10. Buffer类

    输入流中可以通过缓冲区来加大读取的效率,sun公司感觉可以加快执行效率,他就为我们提供了一个类来操作缓存区. Buffer来头的类:所有缓冲流都是以Buffer开头的: 学习缓冲流的作用: Buffe ...

随机推荐

  1. Juniper SRX550防火墙web页面CPU达到100%的故障解决办法

    Juniper SRX550防火墙web页面CPU达到100%的故障解决办法 利用telnet远程连接主机,对web页面注销重新登录即可,在配置中输入命令:run restart web-manage ...

  2. my04_Mysql复制数据一致性校验

    1. 搭建一套双节点的Mysql主从复制数据库 2. 主库初始化测试数据 drop table if exists test; ),test_id int NOT NULL AUTO_INCREMEN ...

  3. 【ACM】小猴子下落

    小猴子下落 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 有一颗二叉树,最大深度为D,且所有叶子的深度都相同.所有结点从左到右从上到下的编号为1,2,3,····· ...

  4. 关于WampServer一些配置修改

    1.解决WAMP mysql中文乱码问题(在mysql的my.ini文件中) 1).找到client字段并添加:default-character-set=utf8 2).找到mysql字段并添加: ...

  5. SQL Server覆盖索引--有无包含列对数据库查询性能的影响分析

    “覆盖索引使您能够避免返回到表中以满足请求的所有列,因为所有请求的列都已经存在于非聚集索引中.这意味着您还可以避免返回到表中进行任何逻辑或物理的信息读取.” 然而,以上这不是我想要传达的全部意思,因为 ...

  6. 移动测试之appium+python 简单例子(五)

    # coding=utf-8 from appium import webdriver import time import unittest import os import HTMLTestRun ...

  7. yarn/mapreduce工作机制及mapreduce客户端代码编写

    首先需要知道的就是在老版本的hadoop中是没有yarn的,mapreduce既负责资源分配又负责业务逻辑处理.为了解耦,把资源分配这块抽了出来,形成了yarn,这样不仅mapreudce可以用yar ...

  8. RTT之AT命令组件

    包含客户端和服务器:用于GPRS和3G的通讯命令格式.四种基本功能 测试功能:AT+<x>=? 用于查询命令参数格式及取值范围: 查询功能:AT+<x>? 用于返回命令参数当前 ...

  9. STlink及烧写工具:

    一 STLINK可以随时在STLINK与jlink之间切换:方法:https://www.segger.com/products/debug-probes/j-link/models/other-j- ...

  10. Windows 10 JDK安装及环境配置(vim+gcc)

    JDK安装 首先去官网下载JDK:点击进入 下载后点击安装: 中途会提示安装jre,注意jre的安装文件夹和jdk的不能相同,不然会覆盖掉jdk里面的jre文件.可以创建一个Java文件夹.将jdk和 ...