将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());
请注意,Uint8ClampedArray
在PhantomJS 1.x.中不可用
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");
相关文章:
- 字段中不输出年龄
- jQuery将地理补全输出到自定义字段
- 想要从输入字段中输出确切的值
- 没有字段名称的猫鼬结构聚合输出
- Javascript 将 int 值转换为八位字节流数组
- 我如何让我的 var 错误消息输出是使用字段还是字段,具体取决于留空的字段数
- 将禁用的输出字段更改为带前缀的文本
- 带有隐藏字段的输出变量
- Inout Text字段在转换为字符串并输出时生成一个空行
- 将Uint8ClampedArray缓冲区作为字节流输出
- 将字符串返回到类型为“0”的输出字段;数字“;针对用户错误javascript
- Java从浏览器读取字节流不同的正文长度
- 我如何在 html 中复制(甚至有一个按钮来选择它)一个 document.getelementbyid 输出字段
- 如何强制 javascript 类忽略输出中外部添加的字段
- 是否可以流式传输在 javascript 中生成的八位字节流
- 将base64中的图像发送到Web服务-'应用程序/八位字节流'不是预期的类型'text/xml
- 资源被解释为图像,但使用MIME类型的应用程序/八位字节流传输
- 如何正确封装套接字.输入输出插座
- 解码可读字节流
- 角+套接字.输入输出处理程序