How to save ArrayBuffer?

2019-03-06 08:06发布

How to save an ArrayBuffer in json file? I use electron-config for this, but in config.json I found "{}". I try convert (code) ArrayBuffer to string, but then I can't convert string to ArrayBuffer.

put: function(key, value) {
    //value = { prop1: <ArrayBuffer>, prop2: <ArrayBuffer> }
    if (key === undefined || value === undefined || key === null || value === null)
        return;
    var prop1Str,prop2Str;
    prop1Str = this.ab2str(value.prop1);
    prop2Str = this.ab2str(value.prop2);
    var chValue = {prop1:prop1Str, prop2:prop2Str};
    config.set(key,chValue);
    console.log(value.prop1 === this.str2ab(config.get(key).prop1)); //===> FALSE
},
ab2str: function(buf) {
    return String.fromCharCode.apply(null, new Uint8Array(buf));
},
str2ab: function(str) {
    var buf = new ArrayBuffer(str.length);
    var bufView = new Uint16Array(buf);
    for (var i=0, strLen=str.length; i < strLen; i++) {
        bufView[i] = str.charCodeAt(i);
    }
    return buf;
}

2条回答
冷血范
2楼-- · 2019-03-06 08:37

There are no ArrayBuffers in the JSON format (only strings, numbers, booleans, null, objects and arrays) so if you want to save an ArrayBuffer in JSON then you'll have to represent it in one of those types (probably a string or an array of numbers).

Then when you read the JSON you will have to convert it back into an ArrayBuffer, reversing the transformation that you did before.

查看更多
走好不送
3楼-- · 2019-03-06 08:52

For saving to disk, you should be able to use the normal node APIs for writing something to disk. For example:

require('fs').writeFileSync('/path/to/saved/file', Buffer.from(myArrayBuffer));
查看更多
登录 后发表回答