javascript代码实例教程-深入浅出NodeJS――Buffer

发布时间:2019-01-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-深入浅出NodeJS――Buffer脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

Javascript对字符串处理十分友好,无论是字节还是单字节字符串,都被认为是一个字符串。Node中需要处理网络协议、操作数据库、处理图片、文件上传等,还需要处理大量二进制数据自带的字符串远不能满足这些要求,因此Buffer应运而生。@H_360_1@

Buffer结构

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

Node在进程启动时Buffer就已经加装进入内存,并将其放入全局对象,因此无需require

Buffer对象:类似于数组,其元素是16进制的两位数。

Buffer内存分配

Buffer对象的内存分配不是在V8的堆内存中,在Node的C++层面实现内存的申请。

为了高效的使用申请来得内存,Node中采用slab分配机制,slab是一种动态内存管理机制,应用各种*nix操作系统。slab有三种状态:

(1) full:完全分配状态

(2) partial:部分分配状态

(3) empty:没有被分配状态

Buffer的转换

Buffer对象可以和字符串相互转换,支持的编码类型如下: ASCII、UTF-8、UTF-16LE/UCS-2、Base64、Binary、Hex 字符串转Buffer new Buffer(str, [encoding]),默认UTF-8 buf.wrITe(string, [offset], [length], [encoding]) Buffer转字符串 buf.toString([encoding], [start], [end]) Buffer不支持的编码类型 通过Buffer.isEncoding(encoding)判断是否支持 iconv-lite:纯JavaScript实现,更轻量,性能更好无需C++到javascript的转换 iconv:调用C++的libiconv库完成

Buffer的拼接

注意res.on('data', function(chunk) {}),其中的参数chunk是Buffer对象,直接用+拼接会自动转换为字符串,对于宽字节字符可能会导致乱码产生,解决方法 (1) 通过可读流中的setEncoding()方法,该方法可以让data事件传递不再是Buffer对象,而是编码后的字符串,其内部使用了StringEncoder模块。 (2) 将Buffer对象暂存到数组中,最后在组装成一个大Buffer让后编码转换为字符串输出 Buffer在文件I/O和网络I/O中广泛应用,其性能举足轻重,比普通字符串性能要高出很多。 Buffer的使用除了与字符串的转换有性能损耗外,在文件读取时候,有一个highWaterMark设置对性能影响至关重要。 a. highWaterMark设置对Buffer内存的分配和使用有一定影响 b. highWaterMark设置过小,可能导致系统调用次数过多

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-深入浅出NodeJS――Buffer全部内容,希望文章能够帮你解决javascript代码实例教程-深入浅出NodeJS――Buffer所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。