How to read binary files byte by byte in Node.js

前端 未结 2 1093
离开以前
离开以前 2020-12-13 06:01

What is the best way to read part of a binary file in Node.js?

I am looking to either access specific bytes in the \"header\" (less than the first 100 bytes) or read

相关标签:
2条回答
  • 2020-12-13 06:49

    This is another 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))
    });
    
    0 讨论(0)
  • 2020-12-13 06:55

    Here is an example of fs.read()-ing the first 100 bytes from a file descriptor returned by 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));
        });
    });
    
    0 讨论(0)
提交回复
热议问题