Java byteArray 在 JavaScript 中的等价物

Java byteArray equivalent in JavaScript

我正在尝试确定哪种编码方案会为我提供 jpeg 文件类型的数字 -1 或 -40(文件的起始编号)。

休息 api 我正在处理的是期待一个看起来像 [-1、94、43、34 等] 的字节数组。在 node.js 中,我可以将字节数组作为十六进制或任何其他编码类型,但无论我尝试哪种编码方案,我似乎都无法获得 -1 或 -40 作为起始值。

在文档中,我在 Java 中看到了一个使用 "toByteArray()" 函数的示例,它似乎获得了起始值(-1 或 -40)。谁能帮帮我?

您正在寻找 Buffer。它允许 reading/writing 各种大小的二进制值和随机访问。

如果我正确理解你的问题,你可以使用 Buffer 获取文件内容,然后将其中的字节读入你的数组。

Java byte类型是一个带符号的8位整数,等价于Node.js Buffer是buf.readInt8().

因此您可以使用 buf.readInt8()

Buffer 中读取所需数量的 bytes 到您的数组中

或者直接转换成Int8Array:

new Int8Array(new Buffer([100, 200, 255, 1, 32]));

我建议您更改使用前 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?

您还可以使用TypeArray.from() method on all Typed Arrays在普通数组之间进行转换:

const values = [-1, 94, 43, 34]

const byteArr = Int8Array.from(values)
const original = Array.from(byteArr)

console.log({ byteArr, original })

奖励:这在节点浏览器

中有效