[英]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.