繁体   English   中英

将Uint8ClampedArray缓冲区输出为字节流

[英]Output a Uint8ClampedArray buffer as a stream of bytes

在PhantomJS脚本中,我有一个Uint8ClampedArray (来自HTML画布的图像数据),我想将其作为字节流输出到stdout。

在Node.js中,我将执行以下操作:

buf = new Buffer(...);
process.stdout.write(buf);

我将如何在PhantomJS中做同样的事情?

我不能只为我的每个字节输出String.fromCharCode() ,例如String.fromCharCode(255)输出两个字节,而不是一个(即128和255之间的任何字节将输出两个字节)。

我已经能够使用fs phantomjs模块写入stdout,因此能够以二进制形式编写:

var fs = require('fs');
var stream = fs.open('/dev/stdout', 'wb');
stream.write(String.fromCharCode(128));
stream.flush();

由于某种原因,它对于大量数据仍然相当慢。

打印到控制台的唯一明智的方法是使用console.log() 缺点是每次调用时都会插入一个换行符,因此不能仅单独打印每个字符。 您必须构建一个字符串,然后再打印。 如前所述,您可以使用String.fromCharCode()将每个字节转换为char。

此外,尚未实现Uint8ClampedArray.prototype.join()类的函数。

var a = new Uint8ClampedArray([37, 38, 39]);
console.log([].map.call(a, function(v){
    return String.fromCharCode(v);
}).join());

请注意,PhantomJS 1.x中没有Uint8ClampedArray

console.log()在二进制模式下不起作用,因此在打印时会将127代码点以上的字符分成两个字节。 仅在打印时会发生这种情况。 您可以检查

String.fromCharCode(147).length; // 1

如果愿意编写文件,则可以使用fs模块以二进制形式编写文件:

var a = new Uint8ClampedArray([37, 38, 39]),
    fs = require('fs');

var b = [].map.call(a, function(v){
    return String.fromCharCode(v);
}).join("");

fs.write("img.dat", b, "wb");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM