如何保存ArrayBuffer?
如何保存ArrayBuffer?
如何将ArrayBuffer保存到json文件中?我使用electron-config来实现这个功能,但是在config.json中我发现"{}"。我尝试将ArrayBuffer转换为字符串(代码参考:链接),但是我无法将字符串转换为ArrayBuffer。
put: function(key, value) { //value = { prop1:, prop2: } 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; }
如何保存ArrayBuffer?
在Node 14.xx+版本中,可以通过以下代码来保存ArrayBuffer:
首先,需要创建一个输出目录:
let rootDir = process.cwd() console.log("当前目录:" + rootDir) let outDir = './out/'; console.log("输出目录:" + outDir) if (!fs.existsSync(outDir)){ fs.mkdirSync(outDir); }else{ console.log("目录已存在"); }
然后,定义一个保存文件的函数:
const saveArrayAsFile = (arrayBuffer, filePath) => { fs.writeFile(filePath, Buffer.from(arrayBuffer), 'binary', (err) => { if (err) { console.log("写入文件时发生错误") } else { console.log("已写入文件:" + filePath) } }); };
最后,调用保存文件的函数来保存ArrayBuffer:
saveArrayAsFile(arrayBuffer, outDir + "文件名" + new Date().getTime() + ".png")
以上就是保存ArrayBuffer的方法。
如何保存ArrayBuffer?
问题的原因:在将ArrayBuffer保存到磁盘上时,需要使用正常的node API来将其写入磁盘。这是因为ArrayBuffer是一种用于处理二进制数据的数据类型,而保存到磁盘上的文件需要通过特定的API才能实现。
解决方法:可以使用以下代码将ArrayBuffer保存到磁盘上:
require('fs').writeFileSync('/path/to/saved/file', Buffer.from(myArrayBuffer));
以上代码中,使用了node的fs模块的writeFileSync方法。该方法接受两个参数:文件路径和要保存的数据。在这里,我们将ArrayBuffer转换为Buffer类型的数据,并将其作为writeFileSync方法的第二个参数传入。
通过以上方法,我们可以将ArrayBuffer保存到指定的文件路径中。
要在JSON中保存ArrayBuffer,需要将其表示为字符串或数字数组中的一种类型。然后在读取JSON时,需要将其转换回ArrayBuffer,恢复之前的转换过程。
如果想在本地数据库或文件中保存ArrayBuffer,可以尝试以下方法。首先将ArrayBuffer转换为字符串,然后再将字符串保存到本地数据库或文件中。当需要使用时,从本地数据库或文件中读取字符串,然后将其转换回ArrayBuffer。
以下是将ArrayBuffer转换为字符串的方法:
function arrayBufferToString(arrayBuffer) {
var uint8Array = new Uint8Array(arrayBuffer);
var string = String.fromCharCode.apply(null, uint8Array);
return string;
}
以下是将字符串转换回ArrayBuffer的方法:
function stringToArrayBuffer(string) {
var uint8Array = new Uint8Array(string.length);
for (var i = 0; i < string.length; i++) {
uint8Array[i] = string.charCodeAt(i);
}
return uint8Array.buffer;
}
通过使用这两个方法,可以将ArrayBuffer保存到本地数据库或文件中,并在需要时恢复为ArrayBuffer。