node提供了专门读写文件的模块,文件内容都是2进制存放在内存中的

node读取文件的结果都是16进制,那么你要学会进制转换,二进制0b开头 ,八进制0开头,十六进制0x

基础知识:

1字节=8bit

一个汉字=3字节,在不同的编码下字节个数还有不同的

一个英文=1字节

buffer里面用16机制表示

Buffer.alloc(3) // 3是代表字节

创建一个有3个字节的内存空间

<Buffer 00 00 00>

默认是0x00 0x00 0x00 0x00

let buf1 = Buffer.alloc(12)
let buf2 = Buffer.from('hello')
let buf3 = Buffer.from('world')
buf2.copy(buf1, 0, 0, 5)
buf3.copy(buf1, 5, 0, 5)
console.log(buf1.toString())
// helloworld

简单的实现一下copy的方法

Buffer.prototype.copy = function (target, targetStart, sourceStart, sourceEnd) {
for(let i = 0; i < sourceEnd-sourceStart; i++) {
target[targetStart + i] = this[sourceStart + i]
}
}

上面是通过copy方法把两个内存拷贝到一起,还有concat方法也可以

let cat = Buffer.concat([buf2, buf3])
两个buffer拼接到一起,返回的一个新的buffer,第二次参数是指定长度
 
基本原理是这样的
Buffer.concat = function (lists, len = lists.reduce((prev, next) => prev + next.length, 0)) {
let buf = Buffer.alloc(len);
let offset = 0;
for(let i = 0; i < lists.length; i++) {
lists[i].copy(buf, offset, 0, lists[i].length)
offset += lists[i].length
}
return buf.slice(0, offset) // 返回有效的内容
}

buffet中的indexOf可以知道当前存在的位置

let index = Buffer.from('a*b').indexOf('*')
console.log(index)

当时很遗憾buffer没有split来拆分成两段buffer,辣么就自己写

Buffer.prototype.split = function (step) {
let arr = [];
let pos = 0;
// 找不到返回-1
let len = Buffer.from(step).length; // 按照buffer的长度来计算的呀
let offset = 0; // 偏移量
while (-1 !== (offset = this.indexOf(step, pos))) {
arr.push(this.slice(pos, offset));
pos = offset + len;
}
arr.push(this.slice(pos));
return arr;
}

node里面的buffer理解的更多相关文章

  1. node里面的c/c++模块

    准备工作 node使用c++插件时需要使用node-gyp包,node-gyp把c++源码编译为二进制文件,js在调用二进制文件,编译后的二进制文件模块调用就和js的模块调用一样. npm insta ...

  2. 友盟推送里面的Alias怎么用?可以理解成账号吗?

    友盟推送里面的Alias怎么用?可以理解成账号吗? 我们的App有自己的账号体系的,想在每次用户登陆的时候,给用户发一个欢迎消息. 看了一下友盟推送,里面有一个概念叫做Alias(别名),但是官方文档 ...

  3. [python]如何理解uiautomator里面的 child, child_by_text, sibling,及使用场景

    如何理解uiautomator里面的 child, child_by_text, sibling,我们借助android原生的uiautomatorviewer抓取的控件来进行理解 以如下图进行详细讲 ...

  4. 深入理解js里面的this

    闲聊两句(可以忽略): 毕业有半年了,时间还过得真快,不过还好,感觉自己相对于刚毕业那会确实成长了很多:好久没有打游戏了(自己决心要戒掉的),消磨时光的时候就看看电影或者追追电视剧,再无聊就洗洗衣服. ...

  5. drupal里面的ajax最粗浅的理解-流程

    1,  form里面的ajax所在地表单元素有一个事件,激发system/ajax,相应的有ajax_form_callback(), 会把被改变的元素值传到form_state[values]中, ...

  6. spring里面的ioc的理解?

    spring里面的ioc就是控制反转,其实现核心是DI(依赖注入),控制反转不向以前java代码里面,通过new关键字来实现创建对象,这样每段代码之间的耦合度就比较高,为了降低每个小模块之间的耦合度, ...

  7. 头文件里面的ifndef /define/endif的作用

    c,c++里面,头文件里面的ifndef /define/endif的作用 今天和宿舍同学讨论一个小程序,发现有点地方不大懂······ 是关于头文件里面的一些地方: 例如:要编写头文件test.h ...

  8. procps包里面的sysctl命令

    procps包里面的sysctl命令 --http://www.cnblogs.com/createyuan/p/3740917.html?utm_source=tuicool&utm_med ...

  9. 学习hash_map从而了解如何写stl里面的hash函数和equal或者compare函数

    ---恢复内容开始--- 看到同事用unordered_map了所以找个帖子学习学习 http://blog.sina.com.cn/s/blog_4c98b9600100audq.html (一)为 ...

随机推荐

  1. CF1107

    我哭了......什么鬼题我怎么都不会...果然教育场是教我做人的... 打的虚拟赛,286名...太菜了.EF都是可做题我都没写出来...G题大水题我居然没看... B:设g(i) = i的各位数字 ...

  2. A1106. Lowest Price in Supply Chain

    A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...

  3. 【POJ2226】Muddy Fields

    题目大意:给定一个 N*M 的图,图中有一些格子不能被任何东西覆盖,现有一些宽度为 1,长度任意的骨牌覆盖这些可以被覆盖的格子,骨牌之间可以重叠,求将所有可以被覆盖的格子覆盖所需的最小骨牌数是多少. ...

  4. 分布式监控系统Zabbix--使用Grafana进行图形展示

      今天介绍一款高颜值监控绘图工具Grafana,在使用Zabbix监控环境中,通常我们会结合Grafana进行图形展示.Grafana默认没有zabbix作为数据源,需要手动给zabbix安装一个插 ...

  5. padding内边距

    android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/ac ...

  6. Android studio自带的sample例子

    1. 直接查看Github上面的Sample Sample in GitHub:  点击打开链接 2. FQ下载(个人倾向于下载) 需要FQ工具 goagent goagent在windows下的安装 ...

  7. Luogu P3168 [CQOI2015]任务查询系统

    题目链接 \(Click\) \(Here\) 差分主席树,就是把主席树做成一个差分前缀和的形式,还是很容易想到的. 写主席树的时候几个注意点: 查询可能开始于所有任务之前,二分任务点要把左边界设置为 ...

  8. 【转载】 qml: MouseArea重叠问题;

    原文: https://blog.csdn.net/qq_15024587/article/details/80000443 MouseArea控件大家应该是很熟悉的了.   使用起来也是非常方便的说 ...

  9. bzoj2733 离线+并查集+主席树

    https://www.lydsy.com/JudgeOnline/problem.php?id=2733 网上清一色的合并线段树题解,我又不会,只能自己胡来,没想到Rush过去了 永无乡包含 n 座 ...

  10. bzoj3237 cdq分治+可撤销并查集

    https://www.lydsy.com/JudgeOnline/problem.php?id=3237 年轻的花花一直觉得cdq分治只能用来降维,不料竟然可以用来分治询问 N<=100000 ...