V
V
Vladimir Krauz2016-08-06 22:07:00
JavaScript
Vladimir Krauz, 2016-08-06 22:07:00

How to read and write binary file using Buffer or ArrayBuffer?

Здравствуйте.
Нужно прочитать данные из бинарного файла в Buffer или ArrayBuffer (не знаю что для этого лучше подходит), после из этого же Buffer or ArrayBuffer записать обратно в файл.
Смысла тут никакого, мне просто нужен наглядный пример реализации, ибо понять не могу как оно должно работать.
Заранее спасибо!

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexey Yarkov, 2016-08-06
@MelancholicTheDie

var path = 'public/uploads/file.txt',
buffer = new Buffer("some content\n");

fs.open(path, 'w', function(err, fd) {
    if (err) {
        throw 'error opening file: ' + err;
    }

    fs.write(fd, buffer, 0, buffer.length, null, function(err) {
        if (err) throw 'error writing file: ' + err;
        fs.close(fd, function() {
            console.log('file written');
        })
    });
});

How to read explain?
fs.open(filepath, 'r', function(err, fd) {
    fs.fstat(fd, function(err, stats) {
        var bufferSize=stats.size,
            chunkSize=512,
            buffer=new Buffer(bufferSize),
            bytesRead = 0;

        while (bytesRead < bufferSize) {
            if ((bytesRead + chunkSize) > bufferSize) {
                chunkSize = (bufferSize - bytesRead);
            }
            fs.read(fd, buffer, bytesRead, chunkSize, bytesRead);
            bytesRead += chunkSize;
        }
        console.log(buffer.toString('utf8', 0, bufferSize));
        fs.close(fd);
    });
});

We receive a file via websocket from the client:
// Convert a binary buffer into a "binary" encoded string.
function binaryEncode(buffer) {
  var string = "";
  for (var i = 0, l = buffer.length; i < l; i++) {
    string += String.fromCharCode(buffer[i]);
  }
  return string
}

// Convert a "binary" encoded string into a binary buffer.
function binaryDecode(string) {
  var length = string.length;
  var buffer = new Buffer(length);
  for (var i = 0; i < length; i++) {
    buffer[i] = string.charCodeAt(i);
  }
} 

client.on('stream', function(stream, meta){
  var bufs = [];
  stream.on('data', function(data){
    bufs.push(data);
  });
  stream.on('end', function(){
    var buf = binaryEncode(Buffer.concat(bufs));
    fs.writeFile(__dirname + "/tmp/"+meta.frame+".dat", buf, "binary", function(err) {
      if(err) {
        console.log(err);
      } else {
        console.log("The file was saved!");
      }
    });
  });
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question