对类型化数组(TypedArray)与ArrayBuffer的理解_html/css_WEB-ITnose
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了对类型化数组(TypedArray)与ArrayBuffer的理解_html/css_WEB-ITnose,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3678字,纯文字阅读大概需要6分钟。
内容图文
![对类型化数组(TypedArray)与ArrayBuffer的理解_html/css_WEB-ITnose](/upload/InfoBanner/zyjiaocheng/405/e9acb1895469432eacffb3f9d8130a91.jpg)
对于刚接触类型化数组的概念看到这可能还是云里雾里,下面将逐一将我所理解的ArrayBuffer中的关键概念做个整理:
视图(View)
大多数资料中对于视图都是一句带过,比如这篇博客中( ArrayBuffer:类型化数组)对于视图的解释就是:
ArrayBuffer作为内存区域,可以存放多种类型的数据。不同数据有不同的存储方式,这就叫做“视图”。
当我刚看到上面的解释,还是无法体会“视图”的含义,暂且把ArrayBuffer的概念放一边, 想象一下,既然是操作二进制数据的接口,那么该如何操作他们呢, 比如8位二进制数1是 00000001,我们肯定不会使用原始的二进制编程,那么当我们操作这个 1时,肯定是以 1的形式操作, 那么这里的 1就是视图(view)了, 视图可以理解为方便理解的二进制数据。如果知道C语言,对于这个概念就不难把握了,比如C语言中的字符串实际是数字,那么这里的字符串也可以理解为“视图”。其实这里的视图就是类型化数组。
ArrayBuffer的概念
ArrayBuffer是一段不透明的内存区域(所谓不透明,就是无法直接操作的数据块),单位是字节(Byte)也就是8位,它的 byteLength属性返回其内存大小。在JS中,通过构造函数的形式申明一段ArrayBuffer区域:
var a = new ArrayBuffer(10)a.byteLength // =>10
在这段内存区域上,可以使用不同的视图来创建任意数量的类型化数组, 这些类型化数组也可以是重叠的。有八种不同的类型化数组(视图),分别为:
-
Int8Array:8位有符号整数,长度1个字节。
-
Uint8Array:8位无符号整数,长度1个字节。
-
Int16Array:16位有符号整数,长度2个字节。
-
Uint16Array:16位无符号整数,长度2个字节。
-
Int32Array:32位有符号整数,长度4个字节。
-
Uint32Array:32位无符号整数,长度4个字节。
-
Float32Array:32位浮点数,长度4个字节。
-
Float64Array:64位浮点数,长度8个字节。
这里引用这篇博客中( JavaScript中的ArrayBuffer详细介绍)的例子来解释ArrayBuffer区域中出现的重叠现象:
var buffer = new ArrayBuffer(12)var x = new Float32Array(buffer, 0, 2)var y = new Float32Array(buffer, 4, 1)x[1] = 7;console.log(y[0]); // 7
原文中作者的解释过于简单。这里的 y[0]之所以为7,是因为在 buffer这段12个字节的内存区域中,申明来一个从0字节开始,长度为2的32位浮点数 x(也就是说x占了前8个字节),再申明一个从第 4个字节开始,长度为1的32位浮点数 y,那么这里的 y与 x实际上就是重叠的, x已经占了8个字节,而 y是从第4个字节开始的。既然是重叠的,那么改变 x势必会影响到 y,这里 x类型化数组的第一个元素赋值为7,那么在ArrayBuffer中即是 00000000 00000000 00000000 00000111而 y是从第四个字节开始,也就是从 00000111开始, 所以 y也是 00000111也就是7了。
类型化数组与常规数组的区别
类型化数组实质上是二进制数据,而ArrayBuffer这段区域又是指定长度的,基于这些便可推出其与常规数组的区别:
-
类型化数组元素都是数字,它不像JS常规数组那样可以参杂不同类型,比如下面例子:chestnut:中的赋值就是无效的
-
类型化数组长度固定
-
所有元素初始化为0
var a = new Int8Array(3)a[0] = 'hello'a[0] // =>0 显示a[0]依然未定义a[0] = '8'a[0] // = > 8 但是注意类型的自动转换,当可被转换成数字时,JS会自动将其转成数值
DataView
既然本质是在操作二进制数据,那么就涉及到“高位优先”还是“低位优先”的数据传输问题……
今天太晚啦,明天接着码,未完待续~
内容总结
以上是互联网集市为您收集整理的对类型化数组(TypedArray)与ArrayBuffer的理解_html/css_WEB-ITnose全部内容,希望文章能够帮你解决对类型化数组(TypedArray)与ArrayBuffer的理解_html/css_WEB-ITnose所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。