我有一个大对象,我想将其存储在 ArrayBuffer 中(假设是 Uint8Array)。注意:我不知道该物体有多大。
我已经掌握了有关在缓冲区中设置值的所有逻辑。 (例如,如果我使用 new Uint8Array(100000000);
,它已经可以工作了。)
问题是我不知道是否可以有效地调整缓冲区大小。性能是这里的主要关注点。
我一直在考虑从 new Uint8Array(100);
开始如果我需要更多,我会创建一个大小为两倍的新 new Uint8Array(200);
并将现有内容复制到新内容上(不太确定如何)。等等。
创建一个常规数组并在最后将其转换为 Uint8Array
怎么样? ?
最佳答案
如果您一次只需要一个,但每次仍然需要多个并且需要速度,则需要保留第一个数组并覆盖它。您可以按照您的描述算出第一个所需的内存量(它并不慢),但保留下一个数组的数组(您需要一些东西来保持当前长度)。每次当你需要更多的时候,你就按照第一个的方式去做。当内存变得太大时,您可能希望不时地“释放”内存。
是的,它是一个穷人的 malloc()
/垃圾收集器,它假设您对数组的需求是严格连续的。
关于javascript - JS : ArrayBuffer of Unknown Size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36831279/