Wie kann ich am besten einen Teil einer Binärdatei in Node.js lesen?
Ich möchte entweder auf bestimmte Bytes im "Header" (weniger als die ersten 100 Bytes) zugreifen oder die Datei Byte für Byte lesen.
Wie kann ich am besten einen Teil einer Binärdatei in Node.js lesen?
Ich möchte entweder auf bestimmte Bytes im "Header" (weniger als die ersten 100 Bytes) zugreifen oder die Datei Byte für Byte lesen.
Hier ist ein Beispiel für fs.read()
-die ersten 100 Bytes aus einem Dateideskriptor, der von fs.open()
:
var fs = require('fs');
fs.open('file.txt', 'r', function(status, fd) {
if (status) {
console.log(status.message);
return;
}
var buffer = Buffer.alloc(100);
fs.read(fd, buffer, 0, 100, 0, function(err, num) {
console.log(buffer.toString('utf8', 0, num));
});
});
Dies ist eine weitere Option
const fs = require('fs');
const fileName = 'something.bin'
/*
Requirements ex:
Content in 512 bytes chunks.
Send the 512 bytes packet as a 1024 char string, where each byte is sent as a
2 hex digits.
An "addr" field starts from 0 and tracks the offset of the first byte of the
packet.
*/
function chunk(s, maxBytes) {
//! https://nodejs.org/api/buffer.html#buffer_buf_slice_start_end
/*
buf.slice([start[, end]])
start <integer> Where the new Buffer will start. Default: 0.
end <integer> Where the new Buffer will end (not inclusive). Default: buf.length.
Returns: <Buffer>
*/
let buf = Buffer.from(s);
const result = [];
let readBuffer = true
let startChunkByte = 0
let endChunkByte = maxBytes
while(readBuffer) {
// First round
startChunkByte === 0 ? endChunkByte = startChunkByte + maxBytes : ""
//Handle last chunk
endChunkByte >= buf.length ? readBuffer = false : ""
// addr: the position of the first bytes. raw: the chunk of x bytes
result.push({"addr":startChunkByte,"raw":buf.slice(startChunkByte, endChunkByte).toString('hex')});
startChunkByte = endChunkByte
endChunkByte = startChunkByte + maxBytes
}
return result;
}
fs.readFile(fileName, (err, data) => {
if (err) throw err;
// Let's choose 512 bytes chunks
const arrBinChunk = chunk(data, 512)
arrBinChunk.forEach(element => console.log(element))
//Tests - should be able to see 1024, 1024, as per riquerements
arrBinChunk.forEach(element => console.log(element.raw.length))
});
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.