前置知识
ArrayBuffer
ArrayBuffer对象代表储存二进制数据的一段内存,它不能直接读写,只能通过视图进行操作
const buffer1 = new ArrayBuffer(16);
// Uint8Array —— 将 ArrayBuffer 中的每个字节(8位)视为 0 到 255 之间的单个数字(每个字节是 8 位)。这称为 “8 位无符号整数”。
const uint8 = new Uint8Array(buffer1);
// 修改
uint8[0] = 65
// ArrayBuff转字符串
const decode = new TextDecoder('utf-8')
const text = decode.decode(uint8)
位、字节、字符
位:计算机最基本的单位,只有0和1
字节:1个字节 = 8位
字符:根据编码而定
ASCII码:1字符 = 1字节
unicode码:1字符 = 2字节
UFT-8码:根据字符类型决定 1英文 = 1字节 1汉字 = 3字节 1生僻字 = 4-6字节
什么是 stream
流一般指的是数据流(data stream),它是一组有序,有起点和终点的字节的数据序列。
数据块 Chunks
数据块是向流写入或从流中读取的单个数据块。在数据传输前,数据会被分成一块一块的以方便传输和处理。
可读流 Readable streams
可读流表示可以读取的数据源。例如我们要处理一份json数据,我们可以创建一个ReadableStream实例,然后使用它来加载数据,输出加载进度。
可写流 Writable streams
可写流表示数据写入的目的地,一般搭配可读流使用,例如我们创建了图片的读取流对象后,就能够创建一个WritableStream实例,通过管道连接起来,就可以对图片进行压缩转格式等操作。
transform streams
转换流是流操作的重点,相应地使用它也是创建一个
TransformStream实例,其内部是一个写入流 + 读取流。
管道 Pipe
流必须通过管道来进行传输。可读流可以通过pipeTo()方法直接连接可写流,也可以通过pipeThrough()连接一个或多个转换流,这些方法在各种流之间建立管道。不同的管道组成一起就叫做管链Pipe chains。
tee
tee()是可读流的一个方法,用于创建2个可读流的副本,由于一个流只能被使用一次,使用后原先的流就会被locked,如果要对流进行多种处理,可以使用该方法。