mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-29 05:42:20 +00:00
edit typedArray
This commit is contained in:
parent
e9f7c5186a
commit
5f3f250332
@ -1,6 +1,6 @@
|
|||||||
# 二进制数组
|
# 二进制数组
|
||||||
|
|
||||||
二进制数组(ArrayBuffer对象、TypedArray视图和DataView视图)是JavaScript操作二进制数据的一个接口。这些对象早就存在,属于独立的规格,ES6将它们纳入了ECMAScript规格,并且增加了新的方法。
|
二进制数组(ArrayBuffer对象、TypedArray视图和DataView视图)是JavaScript操作二进制数据的一个接口。这些对象早就存在,属于独立的规格(2011年2月发布),ES6将它们纳入了ECMAScript规格,并且增加了新的方法。
|
||||||
|
|
||||||
这个接口的原始设计目的,与WebGL项目有关。所谓WebGL,就是指浏览器与显卡之间的通信接口,为了满足JavaScript与显卡之间大量的、实时的数据交换,它们之间的数据通信必须是二进制的,而不能是传统的文本格式。文本格式传递一个32位整数,两端的JavaScript脚本与显卡都要进行格式转化,将非常耗时。这时要是存在一种机制,可以像C语言那样,直接操作字节,将4个字节的32位整数,以二进制形式原封不动地送入显卡,脚本的性能就会大幅提升。
|
这个接口的原始设计目的,与WebGL项目有关。所谓WebGL,就是指浏览器与显卡之间的通信接口,为了满足JavaScript与显卡之间大量的、实时的数据交换,它们之间的数据通信必须是二进制的,而不能是传统的文本格式。文本格式传递一个32位整数,两端的JavaScript脚本与显卡都要进行格式转化,将非常耗时。这时要是存在一种机制,可以像C语言那样,直接操作字节,将4个字节的32位整数,以二进制形式原封不动地送入显卡,脚本的性能就会大幅提升。
|
||||||
|
|
||||||
@ -464,7 +464,7 @@ function str2ab(str) {
|
|||||||
|
|
||||||
不同的视图类型,所能容纳的数值范围是确定的。超出这个范围,就会出现溢出。
|
不同的视图类型,所能容纳的数值范围是确定的。超出这个范围,就会出现溢出。
|
||||||
|
|
||||||
TypedArray数组对于溢出,采用的处理方法是求余值。正向溢出(overflow)等于,当前数据类型的最小值加上余值,再减去1;负向溢出(underflow)等于当前数据类型的最大值减去余值,再加上1。
|
TypedArray数组对于溢出,采用的处理方法是求余值。正向溢出(overflow)的含义是输入值大于当前数据类型的最大值,最后得到的值就等于当前数据类型的最小值加上余值,再减去1;负向溢出(underflow)等于当前数据类型的最大值减去余值,再加上1。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var uint8 = new Uint8Array(1);
|
var uint8 = new Uint8Array(1);
|
||||||
@ -476,7 +476,7 @@ uint8[0] = -1;
|
|||||||
uint8[0] // 255
|
uint8[0] // 255
|
||||||
```
|
```
|
||||||
|
|
||||||
上面例子中,8位无符号整数的数值范围是0到255,超出这个范围,就是溢出。256相当于正向溢出1,回到最小值0;-1相当于负向溢出1,回到最大值255。
|
上面例子中,8位无符号整数的数值范围是0到255,超出这个范围,就是溢出。256相当于正向溢出1,即余值为1,最后的值等于0(`0 + 1 -1`);-1相当于负向溢出1,余值也为1,最后的值等于255(`255 - 1 + 1`)。
|
||||||
|
|
||||||
下面是8位带符号整数的例子。
|
下面是8位带符号整数的例子。
|
||||||
|
|
||||||
@ -609,6 +609,22 @@ Float32Array.of(0.151, -8, 3.7)
|
|||||||
// Float32Array [ 0.151, -8, 3.7 ]
|
// Float32Array [ 0.151, -8, 3.7 ]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
下面三种方法都会生成同样一个TypedArray数组。
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// 方法一
|
||||||
|
let tarr = new Uint8Array([1,2,3]);
|
||||||
|
|
||||||
|
// 方法二
|
||||||
|
let tarr = Uint8Array.of(1,2,3);
|
||||||
|
|
||||||
|
// 方法三
|
||||||
|
let tarr = new Uint8Array(3);
|
||||||
|
tarr[0] = 0;
|
||||||
|
tarr[1] = 1;
|
||||||
|
tarr[2] = 2;
|
||||||
|
```
|
||||||
|
|
||||||
### TypedArray.from()
|
### TypedArray.from()
|
||||||
|
|
||||||
静态方法`from`接受一个可遍历的数据结构(比如数组)作为参数,返回一个基于这个结构的TypedArray实例。
|
静态方法`from`接受一个可遍历的数据结构(比如数组)作为参数,返回一个基于这个结构的TypedArray实例。
|
||||||
@ -883,7 +899,7 @@ reader.onload = function () {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
下面以处理bmp文件为例。假定file变量是一个指向bmp文件的文件对象,首先读取文件。
|
下面以处理bmp文件为例。假定`file`变量是一个指向bmp文件的文件对象,首先读取文件。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var reader = new FileReader();
|
var reader = new FileReader();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user