如何使用JavaScript逐字节读取二进制文件?

8

我需要使用JavaScript逐字节读取二进制文件。我在这个网站上找到了以下代码,但它不起作用。我认为我需要添加一些额外的源文件作为参考。请帮助我完成它。以下是代码...

var fs = require('fs');
var Buffer = require('buffer').Buffer;
var constants = require('constants');

fs.open("file.txt", 'r', function(status, fd) {
    if (status) {
        console.log(status.message);
        return;
    }
    var buffer = new Buffer(100);
    fs.read(fd, buffer, 0, 100, 0, function(err, num) {
        console.log(buffer.toString('utf-8', 0, num));
    });
}); 

你需要逐字节读取它还是需要逐字节处理其内容 - robertklep
2
你需要用Node.js来实现这个,对吧? - Fedor Alexander Steeman
3个回答

9
您可以同步地按字节读取文件:
fs.open('file.txt', 'r', function(err, fd) {
  if (err)
    throw err;
  var buffer = Buffer.alloc(1);
  while (true)
  {   
    var num = fs.readSync(fd, buffer, 0, 1, null);
    if (num === 0)
      break;
    console.log('byte read', buffer[0]);
  }
});

5
最好使用var buffer = Buffer.alloc(1); - Saman
1
@Saman 当然,但是在6年前回答这个问题时还不存在。另外,我建议使用 const - robertklep
1
当然,我已经为像我这样的新访客准备好了。谢谢。 - Saman

2

您可以使用以下代码:

var blob = file.slice(startingByte, endindByte);
reader.readAsBinaryString(blob);

这是它的工作原理:

  • file.slice 将文件切片为字节并保存到变量中,以二进制形式保存。您可以通过指定起始字节和结束字节来进行切片。

  • reader.readAsBinaryString 将该字节打印为二进制文件。无论文件大小如何都不重要。

有关更多信息,请参见此链接


这是一个有趣的答案,但似乎使用了Web FileReader API,这在Node.js中不可用,因此遗憾地不适用于具体问题。 - bmaupin

0
import { readFile } from 'fs/promises';

// read the file into a buffer (https://nodejs.org/api/fs.html#fspromisesreadfilepath-options)
(await readFile('file.txt'))
  // (optional) read just a portion of the file
  .slice(startingByte, endingByte)
  // process each byte however you like
  .forEach((byte) => console.log(byte));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接