我一直在寻找如何调整 ArrayBuffers 大小的方法,我找到了以下两种方法:
1(Uint8Array):
function resizeUint8(baseArrayBuffer, newByteSize) {
var resizedArrayBuffer = new ArrayBuffer(newByteSize),
resizedView = new Uint8Array(resizedArrayBuffer),
baseView = new Uint8Array(baseArrayBuffer);
for(var i = 0; i < baseView.length; i++) {
resizedView[i] = baseView[i];
}
return resizedArrayBuffer;
}
2(Float64Array):
// newByteSize is divisible by 8
function resizeFloat64(baseArrayBuffer, newByteSize) {
var resizedArrayBuffer = new ArrayBuffer(newByteSize),
resizedView = new Float64Array(resizedArrayBuffer),
baseView = new Float64Array(baseArrayBuffer);
for(var i = 0; i < baseView.length; i++) {
resizedView[i] = baseView[i];
}
return resizedArrayBuffer;
}
比较: #1 使用 Uint8Arrays 因此对于 baseArrayBuffer 中的每个字节,您必须将其单独复制到调整大小的数组缓冲区。现在对于#2,我使用了一个 Float64Array,因此我可以迭代 8 倍的索引来获得相同的结果。
关注点:使用 Float64Array 似乎是明显的“更高性能”的方法;但是,我在使用 Float64Array 时有什么遗漏吗?通过 Float64Array 视图设置每个索引时是否会丢失值精度?是否有任何其他缺点(除了确保字节大小可被 8 整除)?