node里面的buffer理解
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.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理解的更多相关文章
- node里面的c/c++模块
准备工作 node使用c++插件时需要使用node-gyp包,node-gyp把c++源码编译为二进制文件,js在调用二进制文件,编译后的二进制文件模块调用就和js的模块调用一样. npm insta ...
- 友盟推送里面的Alias怎么用?可以理解成账号吗?
友盟推送里面的Alias怎么用?可以理解成账号吗? 我们的App有自己的账号体系的,想在每次用户登陆的时候,给用户发一个欢迎消息. 看了一下友盟推送,里面有一个概念叫做Alias(别名),但是官方文档 ...
- [python]如何理解uiautomator里面的 child, child_by_text, sibling,及使用场景
如何理解uiautomator里面的 child, child_by_text, sibling,我们借助android原生的uiautomatorviewer抓取的控件来进行理解 以如下图进行详细讲 ...
- 深入理解js里面的this
闲聊两句(可以忽略): 毕业有半年了,时间还过得真快,不过还好,感觉自己相对于刚毕业那会确实成长了很多:好久没有打游戏了(自己决心要戒掉的),消磨时光的时候就看看电影或者追追电视剧,再无聊就洗洗衣服. ...
- drupal里面的ajax最粗浅的理解-流程
1, form里面的ajax所在地表单元素有一个事件,激发system/ajax,相应的有ajax_form_callback(), 会把被改变的元素值传到form_state[values]中, ...
- spring里面的ioc的理解?
spring里面的ioc就是控制反转,其实现核心是DI(依赖注入),控制反转不向以前java代码里面,通过new关键字来实现创建对象,这样每段代码之间的耦合度就比较高,为了降低每个小模块之间的耦合度, ...
- 头文件里面的ifndef /define/endif的作用
c,c++里面,头文件里面的ifndef /define/endif的作用 今天和宿舍同学讨论一个小程序,发现有点地方不大懂······ 是关于头文件里面的一些地方: 例如:要编写头文件test.h ...
- procps包里面的sysctl命令
procps包里面的sysctl命令 --http://www.cnblogs.com/createyuan/p/3740917.html?utm_source=tuicool&utm_med ...
- 学习hash_map从而了解如何写stl里面的hash函数和equal或者compare函数
---恢复内容开始--- 看到同事用unordered_map了所以找个帖子学习学习 http://blog.sina.com.cn/s/blog_4c98b9600100audq.html (一)为 ...
随机推荐
- iview表单验证下拉框不通过问题
iview表单验证的步骤: 第一步:给 Form 设置属性 rules :rules 第二步:同时给需要验证的每个 FormItem 设置属性 prop 指向对应字段即可 prop=”“ 第三步:注意 ...
- 洛谷P3723 礼物
以前看到过,但是搞不倒.知道了算法之后就好搞了. 题意:给定两个长为n的序列,你可以把某个序列全部加上某个数c,变成循环同构序列. 求你操作后的min∑(ai - bi)² 解: 设加上的数为c,那么 ...
- django2 用iframe标签完成 网页内嵌播放b站视频功能
前言: 给自己的网站中加入视频资源,有两种方法,一种是用iframe标签引用外站资源,另一种则使用video标签,获取站内资源进行视频播放.其中前者顾名思义,是将视频资源上传到视频网站中,然后通过引用 ...
- 使用bcftools提取指定样本的vcf文件(extract specified samples in vcf format)
1.下载安装bcftools. 2.准备样本ID文件,这里命名为samplelistname.txt,一个样本一行,如下所示: sample1 sample2 sample3 3.输入命令: bcft ...
- tensor flow中summary用法总结
对于用法的总结详细的参见博文https://www.cnblogs.com/lyc-seu/p/8647792.html
- (count 或直接枚举) 统计字符 hdu1860
统计字符(很水) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1860 Time Limit: 1000/1000 MS (Java/Others) ...
- 新建体(1):新建type
类似数组的类型: TYPE TAB_TYPE_MCHNO IS TABLE OF t_r_terminal.rt_merchno%type; tMchNo TAB_TYPE_MCHNO; )集合赋值: ...
- 剑指Offer_编程题_14
题目描述 输入一个链表,输出该链表中倒数第k个结点. /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : va ...
- JavaFX 简介
JavaFX 介绍一提到Java的图形界面库,我们通常听到的都是Swing,或者更老一点的AWT,包括很多书上面介绍的也都是这两种.很多学校.培训班教学的也是这两种技术.但是其实这两种技术都已经过时很 ...
- Linux记录-salt-minion安装
python -m SimpleHTTPServer 8888#!/bin/bash sed -i 's/^#//g' /etc/yum.repos.d/centos7.4.repo sed -i ' ...