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
中读取所需数量的 byte
s 到您的数组中
或者直接转换成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 })
奖励:这在节点和浏览器
中有效
我正在尝试确定哪种编码方案会为我提供 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
中读取所需数量的 byte
s 到您的数组中
或者直接转换成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 })
奖励:这在节点和浏览器
中有效