- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个带有 TypedArray 成员的对象,我想卡住它以防止在设置后修改数据。尝试卡住 TypedArray 或其 ArrayBuffer 的行为与我预期的不同。出于好奇,我想知道它为什么会这样。我正在运行 Node 4.4.4 和 Chrome,它们的行为或多或少是相同的。
var typedArray = new Uint32Array(4);
typedArray[0] = 10;
typedArray[1] = 20;
Object.freeze(typedArray);
// throws TypeError : Cannot freeze array buffer views with elements(...)
接下来我尝试的是卡住底层的 ArrayBuffer
Object.freeze(typedArray.buffer); // Does not throws errors
Object.isFrozen(typedArray.buffer); // returns true
typedArray[0] = 50; // Successfully modifies the data, despite the buffer is frozen
我知道我可以更改我的设计以不保留原始缓冲区,并在需要时从数据成员重建它。但我只是对这种行为感到好奇。
谢谢
最佳答案
如您所见,类型化缓冲区是对原始数据的一种引用。类型化缓冲区可以引用原始缓冲区的一片,多个类型化缓冲区可以引用原始缓冲区的同一片。这是可能的,例如 subarray .这就是为什么卡住类型缓冲区无法保护原始数据不被更改的原因。存储有关原始缓冲区切片的所有数据(已卡住)并在每次更改查询期间进行检查的成本太高。
因此,由于卡住类型化缓冲区并不能保证数据保存,标准的设计者决定禁止卡住类型化缓冲区。另一种让类型化缓冲区被卡住的解决方案,注意它不能保证数据保存。替代实现可以使卡住类型缓冲区成为数据的只读接口(interface),可以由另一个类型缓冲区更改。
标准的设计者只是选择了最简单的实现方式 Object.freeze例行公事。
关于javascript - TypedArray 和 ArrayBuffers(node/chrome)上的 Object.freeze() 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39141450/
C# 有一个高性能的数组复制函数来复制数组就地: Array.Copy(source, destination, length) 它比手动操作更快,即: for (var i = 0; i < len
我正在学习泛型,并用编译器解决了这个问题: type FloatArray = Float32Array | Float64Array; type IntegerArray = | Int8Arr
查看 TypedArray ( link ) 的源代码,我似乎无法弄清楚这两种方法之间的区别。 getInt() 与getInteger() 基本相同,只是在最后加了一个我看不懂的小东西。谁能给我解释
sdk更新到Android 5.0后方法消失了TextView.getTextColor(Context context, TypedArray typedArray, int defStyle) .
为什么 TypedArray 不如常规数组快?我想存储一些预先计算的整数值,并且需要尽可能快地访问数组。 http://jsperf.com/array-access-speed-2/2 准备代码:
我正在尝试使用 WebGL,并希望将一些不同的类型混合到一个字节缓冲区中。我知道 TypedArrays 可以达到这个目的,但不清楚我是否可以与它们混合类型(OpenGL 顶点数据通常是与无符号字节或
我正在学习自定义组件,我在使用自定义 xml 属性时遇到了一些问题。 我的自定义组件扩展了 LinearLayout 并在构造函数中(public Custom(Context context, At
This answer告诉我调用 recycle() TypedArray 的方法允许它被垃圾收集。我的问题是为什么 TypedArray 特别需要一种方法来对其进行垃圾回收?为什么它不能像普通对象一
在 Chrome(可能还有其他浏览器)中,当我将值存储到超出其范围的 TypedArray 时,它会被 chop : const arr = new Uint16Array(1); arr[0] =
我试图用这个简单的代码片段将 typedArray 拆分成更小的 block : const buf = new Uint8Array([0x02, 0x00, 0x07, 0x63, 0x6f, 0
我有一个源 Float32Array,我从中创建了一个辅助 Float32Array。我有一个值序列 model,我想将其作为重复序列复制到辅助 Float32Array 中。我目前正在使用反向 wh
要测试一个对象是否是一个数组,有一个方法—— const myarray = [1,2,3,4]; Array.isArray(myarray); //returns true 对于类型化数组(例如,
在尝试为自己构建一个 WebGL 3D 库时(主要是学习目的),我遵循了从各种来源找到的文档,这些文档指出 TypedArray 函数 set() (专门针对 Float32Array ),在 C 中
我有一个 typedArray,其中包含我想在 ListView 中使用的图标。当我尝试在 for 循环 this.navDrawerIcons 中引用 typedArray 中包含的元素时如下所示,
给定像 Uint8Array 这样的类型化数组,似乎有两种方法可以通过 worker 传输它们。 选项 1 直接发送缓冲区并在接收端进行转换: 发件人:postMessage({fooBuffer:
根据the documentation on the Uint8ClampedArray , The Uint8ClampedArray typed array represents an array
我在 android 自定义 TextView 中设置了多个标志属性,如何使用 TypedArray 恢复这些属性 最佳答案 attrs.xml
我从使用 android L 预览版的设备收到一些崩溃报告,问题是 Caused by: java.lang.RuntimeException: [17, ...... ] recycled twic
我正在尝试编写一个函数,通过将任意 TypedArray 作为输入来扩展/缩小 TypedArray,并返回一个具有不同大小的新的相同类型的 TypedArray,并将原始元素复制到其中。 例如,当您
我正在通过 XHR 加载远程资源并将其接收为 arrayBuffers 。底层数据为float32依赖。我需要对这些数组缓冲区进行一些进一步的操作,例如串联和合并。对于这些操作,我正在尝试 buffe
我是一名优秀的程序员,十分优秀!