Tag: 缓冲区

如何将二进制缓冲区解码为node.js中的图像?

我收到一个二进制stream如下图所示的图像,但是当我尝试创build一个缓冲区与下面的数据缓冲区看起来是空的。 问题缓冲区不理解这种格式? VQ)EB \ u001599˚F! “:” \ u000b35%L \ u0018pO ^ ::〜米<\ u001eL ķ%G $ b \ U0003 \ u0011 = QV = A \ u0018OUmB \ u000380a_ #\u001b \f ( 3 \u0003 nGjr Mt\ \u0014g 〜 # Q g K s @C \ u001cS` \ u000bpsGnzqRg \ FUC \ u0015 \ u001d3E.BI \ u0007 […]

缓冲区返回值和32位无符号整数

我有一个类的项目,我们将一个BMP文件转换为一个缓冲区,操纵缓冲区,并写入一个新的文件。 https://en.wikipedia.org/wiki/BMP_file_format 前两个字节在转换为utf-8时使用返回字符“BM” buffer.toString('utf-8', 0, 2); 当然,八位字节“42 4d”在转换时会返回“BM”。 在类中,我们被告知: buffer.readUInt32LE(2)将返回文件的大小(根据文件头)。 在这种情况下,它是4个八位字节:“66 75 00 00” 使用readUInt32LE返回数字“ readUInt32LE ”,当我检查字节数时就足够了,情况就是如此。 我想弄清楚的是,为了让“66 75 00 00”变成“30054”,我需要做的一系列操作, 任何澄清将是有益的! 编辑:我需要计算在另一个方向的hex值! “75 66”而不是“66 75”。 感谢Guido 🙂

缓冲区通常比stream更快处理?

我已经尝试了几个Imagemagick包装库和一些S3库。 由于巨大的性能差异,我无法select最佳的概念。 我已经与节点库“gm”解决了,这是一个很好的工作和logging。 至于S3我已经尝试了亚马逊自己的AWS库以及“S3-Streams” 编辑:我刚刚发现,AWS库可以处理stream。 我想这是一个新的functions3.upload(或者我刚刚错过了?)。 无论如何,我放弃了使用s3uploadPart更复杂的S3stream 。 在我的testing案例中切换库stream后等于上传缓冲区。 我的testing用例是将一个2MB的jpg文件分割成大约30个512px的tile,并把每个tile发送到S3。 Imagemagick通过裁剪命令有一个非常快速的自动生成方块。 不幸的是,我还没有find任何节点库,可以捕获自动生成的瓷砖的多文件输出。 相反,我必须通过分别为每个图块调用crop命令来在循环中生成图块。 我会提供详细信息之前的总计时间: A :85秒(s3-streams) A :34秒(aws.s3.upload)(编辑) B :35秒(缓冲器) C :25秒(缓冲区并行) 在这种情况下,明显缓冲区比stream处理更快。 我不知道gm或s3stream是否有不好的stream的实现,或者我应该调整一些东西。 现在我要解决schemeB. C更快,但吃更多的内存。 我在低端数字海洋Ubuntu机器上运行这个。 这是我曾经试过的: A.生成瓦片并逐一stream式传输 我有一个数组准备与裁剪信息和s3Key为每个瓷砖生成 该数组与“async.eachLimit(1)”循环。 我没有成功地一次生成多个瓦片,因此限制(1)。 随着瓦片生成,它们直接stream入S3 伪代码: async.eachLimit(tiles, 1, function(tile, callback) { gm(originalFileBuffer) .crop(tile.width, tile.height, tile.x, tile.y) .stream() .pipe(s3Stream({Key: tile.key, Bucket: tile.bucket})) //using "s3-streams" package .on('finish', callback) }); […]

是否有可能在浏览器中创build一个不安全的数组缓冲区?

在node.js , Buffer实现了一个Uint8Array ,它也在浏览器中可用。 在node.js有一个方法来创build一个不安全的缓冲区 ,其中的字节没有预先初始化为0.这个分配速度要快得多,因为你不必将所有的条目都清零,只要你以后填满一切,这是安全的。 在客户端浏览器的Javascript有没有这样的东西? 由于速度的原因,当我创build大量的数组,我立即填充值,我正在寻找一种方式来不安全地分配这些缓冲区。

如何在s3中使用节点js中的aws-sdk存储Excel文件?

var xls = json2xls(data); var bufferdata = new Buffer(xls).toString('base64'); console.log("inside upload s3 function……..", data); //var buf = new Buffer(data, 'base64'); var uploaddata = { Key: "exception.xls", Body: bufferdata, ContentEncoding: 'base64', ContentType: 'application/vnd.ms-excel' }; 我可以通过s3保存和检索文件。 但格式不匹配即将到来。 请帮助我如何解决这个问题。

如何处理nodejs中的数组缓冲区分配失败?

我已经成功上传imagejs中的图像,我使用的是multer。 但有时会发生“arrays缓冲区分配失败”错误,我想处理该错误。 我试图保持try-catch块中的代码,尽pipe它仍然抛出错误,我无法弄清楚如何处理这个错误或如何避免这个错误? 能够上传文件,但当我尝试改变高度和宽度,并制作一个新的形象,则会引发错误 未捕获RangeError:arrays缓冲区分配失败 在Buffer.Uint8Array(native) 在FastBuffer(buffer.js:8:1) 要么 arrays缓冲区分配失败 在Buffer.Uint8Array(native) 在FastBuffer(buffer.js:8:1) RangeError:数组缓冲区分配在Object.getData(/ Burg_nodejs / node_modules / jpeg-js / node_modules / (/Burg_nodejs/node_modules/jimp/index.js:lib / decoder.js:913:23)在Object.decode(/Burg_nodejs/node_modules/jpeg-js/lib/decoder.js:985:11) 310:36)at /Burg_nodejs/node_modules/jimp/index.js:202:29 at FSReqWrap.readFileAfterClose [as oncomplete](fs.js:446:3) 任何build议将会更有帮助

用缓冲区重现fs.createReadStream

我需要发送一个pdf到一个formData的api。 我下载的时候logging如下所示的pdf: <Buffer 6d 61 67 65 49 2f … >如果我fs.writeFileSync它是完全可读的。 但我想尝试将它传递给api,而不必用fs编写它,以便将pdf作为缓冲区来操作。 我的post看起来像这样: const formData = new FormData(); formData.append('access_key', this.config.redacted); formData.append('redacted','redacted'); formData.append('file', fs.createReadStream('./filename.pdf')); return post('urlRedacted', formData, { headers: formData.getHeaders(), }) 这个请求会成功,但它需要我写的文件与fs ,我想避免。 我尝试了一些使用库node-streamifier来帮助我从缓冲区中创build可读stream的方法,但是api发送给我一个错误: { error: 'Invalid parameter \'file\' or \'bucket\': Object expected' } 。 所以我的问题是,如何重现fs.createReadStream行为,这似乎是我的用例唯一工作? 注意:我试图像这样实现这个解决scheme : formData.append('file', createReadStream(myBuffer))并且像这样formData.append('file', createReadStream(myBuffer,{ encoding: 'binary' }))没有改变任何东西的错误。 解: FS正在stream式传输数据,并智能地从他正在读取的文件中添加一些信息,从而在数据stream开始处提供了这一行: […]

连接“audio/ x-wav”缓冲区并使用“传输编码”服务:“分块”

这个问题是对前一个问题的跟进,由于@thejh而解决了。 我试图将文本转换为audio,并将数据作为“分块”数据提供给客户端。 到目前为止我的头像是这样的: res.writeHead(200, { 'Content-Type': 'audio/wav', // I tried 'audio/x-wav' as well 'Transfer-Encoding': 'chunked' }); 然后,我将文本片段转换为队列中的audio(我将其作为base64编码数据获取),然后像这样提供它们: var src = Base64Audio.replace("data:audio/x-wav;base64,",""); var binAudio = new Buffer( src, 'base64'); res.write(binAudio); 所有的信息都被传输到客户端,但由于某种原因,浏览器(我正在Firefox 7.0.1中testing)正在播放它,并在第一个块之后停止。 这是结果/演示显示audio提前结束 ,这是在github 上运行的代码 。 为什么是这样? 这是因为x-wav数据在头部/元数据中是否具有像End或指定长度的元数据? 如果是这样的元数据是什么,是否有某种方式来编辑它,使浏览器成功连接接收到的块? 我知道Header的'Content-Length': Buffer.length但在这种情况下,我不知道整个stream将会持续多久。 任何人都可以提供build议 是否有可能编辑缓冲区发送之前,让浏览器连接他们正确?

使用Node.js优化缓冲区大小?

我有一种情况,我需要采取一个stream,并把它组装成缓冲区。 我打算编写一个对象转换stream,它将定期input数据,并输出缓冲区对象(其中缓冲区都是相同的大小)。 也就是说,如果我的chunker转换configuration为8KB,并且写入了4KB,那么在输出8KB的Buffer实例之前,它将等待直到写入额外的4KB。 我可以select缓冲区的大小,只要在8KB到32KB的范围内。 有一个最佳尺寸可供select吗? 我很好奇的原因是Node.js文档提到使用SlowBuffer来备份缓冲区,并分配最小8KB: 为了避免在服务器的生命周期中为小块内存分配许多C ++ Buffer对象的开销,Node以8Kb(8192字节)的块分配内存。 如果一个缓冲区小于这个大小,那么它将由父缓冲区对象支持。 如果它大于这个值,那么Node将直接为它分配一个SlowBuffer板。 这是否意味着8KB是一个有效的大小,如果我使用了12KB,将会分配两个8KB SlowBuffers? 还是仅仅意味着最小的有效大小是8KB? 那么简单地使用8KB的倍数呢? 或者,这根本不重要?

node.js从utf8文件创buildhex缓冲区

我有一个.h264文件,看起来像这样: 0000 0001 674d 401f 95a0 1001 86c0 5283 0203 2000 007d 0000 1d4c 1080 0000 0001 68ee 3c80 0000 0001 65b8 041f fff6 91f2 86db 23e0 5147 1a83 b8d4 3141 87b1 43b8 e329 5fd3 5937 bf10 485f af32 4e74 6138 5611 33e3 0778 e035 85ca 2c00 9320 ffbb 45be 09f8 2e51 a039 9f8c fe17 […]