JavaScript 中等效的 Java byteArray
Posted
技术标签:
【中文标题】JavaScript 中等效的 Java byteArray【英文标题】:Java byteArray equivalent in JavaScript 【发布时间】:2015-08-28 03:45:04 【问题描述】:我正在尝试确定哪种编码方案将为我提供 jpeg 文件类型的数字 -1 或 -40(文件的起始数字)。
我正在研究的一个休息 api 需要一个看起来像 [-1、94、43、34 等] 的字节数组。在 node.js 中,我可以将字节数组设置为十六进制或任何其他编码类型,但无论我尝试哪种编码方案,我似乎都无法获得 -1 或 -40 的起始值。
在文档中,我看到了一个使用“toByteArray()”函数的 Java 示例,该函数似乎获取了起始值(-1 或 -40)。谁能帮帮我?
【问题讨论】:
查看类型化数组? ***.com/a/12332802/461499 【参考方案1】:如果我正确理解您的问题,您可以使用Buffer
获取文件内容,然后将其中的字节读取到您的数组中。
Java byte
类型是有符号的 8 位整数,在 Node.js Buffer 中等价于 buf.readInt8()
。
因此,您可以使用 buf.readInt8()
将所需数量的 byte
s 从 Buffer
读取到您的数组中
或者直接转换成Int8Array
:
new Int8Array(new Buffer([100, 200, 255, 1, 32]));
【讨论】:
您好 zulmer thnxs 对于响应,因此传递给 Buffer 对象的值将是文件的大小 var buf = new Buffer(filesize)。同样对于 readInt8(offset),偏移值应该是 0? 如果您需要获取 jpeg 文件内容,请使用fs
模块,更具体地说是fs.readFile()
或fs.readFileSync
。它将为您提供带有文件内容的Buffer
。 offset
是要跳过的字节数,例如offset=0
将返回第一个字节,offset=1
将返回第二个字节,以此类推
完美的 readInt8() 确实在偏移量设置为 0 时给出了预期的字节,我如何使用这个函数获取所有字节值我只是设置 readInt8(0, true),对此不确定
改写上面的评论,我可以运行一个循环来获取所有字节值,但是是否有一个函数只返回所有值【参考方案2】:
您正在寻找Buffer
。它允许读取/写入各种大小的二进制值和随机访问。
【讨论】:
【参考方案3】:我建议您更改使用前 4 个字节的幻数识别 JPEG 文件的逻辑,您的 -40 逻辑可能不够。
FFD8FFE0 should be the first 4 bytes of a jpeg file
因此,以下 Node.js 程序可能会有所帮助
var fs = require('fs');
fs.open("c:\\aa1.jpg", 'r', function(err, doc)
var check = "FFD8FFE0";
var headerLength = ( check.length / 2 );
var byteBuffer = new Buffer(headerLength);
for(var i=0;i<headerLength;i++)
byteBuffer[i] = 0x00;
var head = "";
fs.read(doc, byteBuffer, 0, headerLength, 0, function(err, num)
for(var i=0;i<headerLength;i++)
head += byteBuffer[i].toString(16);
if(head.toLowerCase() == check.toLowerCase())
console.log('It is a JPEG file');
else
console.log('It is not a JPEG file');
);
);
此程序不包括检查错误和文档空值检查
参考How to identify contents of a byte[] is a jpeg?
【讨论】:
【参考方案4】:您也可以在所有Typed Arrays上使用TypeArray.from()
方法在普通数组之间进行转换:
const values = [-1, 94, 43, 34]
const byteArr = Int8Array.from(values)
const original = Array.from(byteArr)
console.log( byteArr, original )
奖励:这适用于节点以及浏览器
【讨论】:
以上是关于JavaScript 中等效的 Java byteArray的主要内容,如果未能解决你的问题,请参考以下文章
Delphi中等效的BYTE数组(BYTE [])与null终止一个整数?
是否有与 Java 正则表达式中的交集 (&&) 运算符等效的 JavaScript 正则表达式?
jQuery event.preventDefault 的 Javascript 本机等效项 [重复]