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() 将所需数量的 bytes 从 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。它将为您提供带有文件内容的Bufferoffset 是要跳过的字节数,例如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 本机等效项 [重复]

base64_encode(file_get_contents(zipPath))c#等效

bython bytearray怎么存文件?

验证openssl c ++中的签名,该签名由JAVA DSA签名?