我想移动一段我的代码,我在其中构建一个THREE.Geometry对象到HTML5 Web Worker.
因为我不想将它序列化为字符串(出于明显的性能目的),我想将它转换为可传输的对象,如ArrayBuffer,File或Blob,所以我可以"通过引用"传递它.
您是否知道将THREE.Geometry转换为其中一个对象的有效方法?
我有一个基本问题.说我有一个Uint16Array,我有4号.
data_16=new Uint16Array([4]);
Run Code Online (Sandbox Code Playgroud)
现在我的长度为1,byteLength为2;
我如何将其转换为Uint8Array.
我不想创建新视图.
data_8 = new Uint8Array(data_16)
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我得到数组长度1和byteLength 1.这不是我想要的.
我需要将16array中的16位值扩展为8位值,以便8位数组,因此最终会得到8位数组的8位数组.
我可以创建一个函数,用shif和所有东西进行转换.但它可以仅使用数组操作吗?
我有一个 Javascript 对象,它将由一个带有参数和子对象的非循环对象层次结构组成。其中一些对象可能保存从文件加载或通过 XHR 接收的二进制数据(如果 Blob、ArrayBuffer 或其他东西尚未定义)。
通常我会使用 JSON.stringify() 将它序列化为 JSON 但我如何指定二进制数据将被 base64 编码?
那么你会推荐我什么二进制数据对象(Blob,ArrayBuffer,...)?
编辑:除普通 JSON 之外的其他数据格式不是一种选择。
我想使用XMLHttpRequest发送多部分表单。我要附加的文件是jpg文件。将文件追加到FormData对象可以正常工作。
但是我想在发送之前处理图像文件。因此,我有一个使用Uint8Array作为输入和输出的库。所以我将处理后的图像作为UInt8Array。
我尝试使用
form.append("picture", new Blob(fileAsArray, {type: "image/jpg"} ));
Run Code Online (Sandbox Code Playgroud)
但它会创建一个八位位组/流。那么,如何通过XMLHttpRequest multipart / form发送Uint8Array以便服务器看到与发送文件对象相同的内容?
前一个问题有一些很好的解决方法:
但是现在RC5已经出来了,我们可以使用arrayBuffer().我似乎无法随心所欲.我如何从这个转到一个不错的pdf blob:
return this._authHttp.get(this.fileUrl+id)
.map((res:Response) => res.arrayBuffer())
.subscribe(
data => {
console.log(data);
var blob = new Blob([data], {type: 'application/pdf'});
console.log(blob);
saveAs(blob, "testData.pdf");
},
err => console.error(err),
() => console.log('done')
);
Run Code Online (Sandbox Code Playgroud)
数据最终是我预期的两倍.我缺少什么想法?
我有以下片段:
new Uint16Array( arraybuffer, 0, 18108 );
Run Code Online (Sandbox Code Playgroud)
我知道,arraybuffer是的一个实例ArrayBuffer,那arraybuffer.byteLength是31984.该arraybuffer的内容是一个黑盒子给我。因为缓冲区的byteLength> 18108,所以我希望它能正常工作。相反,我得到以下错误:
铬:
RangeError:无效的类型化数组长度
Firefox:
TypeError:无效的参数
是什么原因导致失败,或者如何检查无法打开的ArrayBuffer?
如何将字符串转换'AA5504B10000B5'成ArrayBuffer?
我不认为自己是程序员,所以我通过搜索这个网站找到了很多很多问题的答案。不过,我一直无法弄清楚这一点。
使用 Javascript(真的是我现在可以尝试的唯一语言),我正在尝试上传文件并将其二进制数据加载到 ArrayBuffer 中进行编辑。我同时使用 FileSaver.js 和 Blob.js 来提高兼容性。我让用户选择文件,然后加载文件。加载开始时,FileReader 使用 readAsArrayBuffer 将文件加载到 ArrayBuffer 中。我目前已将其设置为发出警报以检查 ArrayBuffer 的内容,但我最终将删除它并简单地处理数据。
如果我取出索引,警报就会知道它正在显示一个 ArrayBuffer,但是每当我选择一个索引(如 [0])时,它都会告诉我它是未定义的。如何将文件数据放入 ArrayBuffer?以及如何分割?最好我想要 1 个字节的索引。
function loadButtonPressed() {
var loadedFile = document.getElementById('loadFile').files;
var testFile = loadedFile[0];
var reader = new FileReader();
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) {
alert(String(reader.result[0]));
}
};
reader.readAsArrayBuffer(testFile);
}
Run Code Online (Sandbox Code Playgroud) 该缓冲区放置在名为的变量下,myBuffer而我感兴趣的是Uint8Array从此对象获取。
我试图循环为:
myBuffer.forEach(function(element) {
console.log(element);
});
Run Code Online (Sandbox Code Playgroud)
并通过以下方式直接访问数组:
console.log(myBuffer['[[Uint8Array]]']);
console.log(myBuffer['Uint8Array']);
Run Code Online (Sandbox Code Playgroud)
但是似乎这都不是正确的方法
取以下片段:
const arr = [1.1, 2.2, 3.3]
const arrBuffer = (Float32Array.from(arr)).buffer
Run Code Online (Sandbox Code Playgroud)
如何将这个ArrayBuffer转换为SharedArrayBuffer?
const sharedArrBuffer = ...?
Run Code Online (Sandbox Code Playgroud) javascript node.js typed-arrays arraybuffer sharedarraybuffer
arraybuffer ×10
javascript ×9
typed-arrays ×3
angular ×1
arrays ×1
blob ×1
filereader ×1
hex ×1
http ×1
json ×1
node.js ×1
pdf ×1
performance ×1
three.js ×1
uint16 ×1
web-worker ×1