JavaScript基础知识总结 14:学习JavaScript中的File API、Streams API、Web Cryptography API

JavaScript基础知识总结 14:学习JavaScript中的File API、Streams API、Web Cryptography API目录一 Atomics 和 SharedArrayB 二 原子操作基础 1 算术及位操作方法 2 原子读和写 3 原子交换 4 原子 Futex 操作与加锁三 跨上下文消息四 EncodingAPI 五 FileAPI 和 BlobAPI1 File 类型 2 FileReader 类型 3 FileReaderSy 类型 4 Blob 与部分读取六 StreamsAPI1 应用场景 2 理解流一 Atomics 和 SharedArrayB 多个上下文访问 SharedArrayB 时 如果同时对缓冲区执行操

一、Atomics和SharedArrayBuffer

二、原子操作基础

1、算术及位操作方法

Atomics API 提供了一套简单的方法用于执行就地修改操作。在ECMA规范中,这些方法被定义为AtomicReadModifyWrite操作。在底层,这些方法都会从SharedArrayBuffer中某个位置读取值,然后执行算术和位操作,最后再把计算结果写到相同的位置。这些操作的原子本质意味着上述读取、修改、写回操作会按顺序执行,不会被其它线程中断。

//创建大小为1的缓冲区 let sharedArrayBuffer = new SharedArrayBuffer(1); //基于缓冲创建Unit8Array let typedArray = new Unit8Array(sharedArrayBuffer); //所有ArrayBuffer全部初始化为0 console.log(typedArray);//Unit8Array[0] //对索引0处的值执行原子加10 Atomics.add(typedArray,0,10);//Unit8Array[10] //对索引0处的值执行原子减10 Atomics.sub(typedArray,0,10);//Unit8Array[0] 

2、原子读和写

  1. 所有原子指令相互之间的顺序永远不会重排。
  2. 使用原子读或原子写保证所有指令都不会相对原子读写重新排序。

除了读写缓冲区的值,Atomics.load()和Atomics.store()还可以构建“代码围栏”。JavaScript引擎保证非原子指令可以相对于load()和store()本地重排,但这个重排不会侵犯原子读写的边界。

const sharedArrayBuffer = new SharedArrayBuffer(4); const view = new Unit32Array(sharedArrayBuffer); //执行非原子写 view[0] = 1; //非原子写可以保证在这个读操作之前完成,因此这里一定会读到1 console.log(Atomics.load(view,0));//1 //执行原子写 Atomics.store(view,0,2); //非原子读可以保证在原子写完成后发生,这里一定会读到2 console.log(view[0]);//2 

3、原子交换

为了保证连续、不间断的先读后写,Atomics API 提供了两种方法:exchange()和compareExchange()。Atomics.exchange()执行简单的交换,以保证其他线程不会中断值得交换。

const sharedArrayBuffer = new SharedArrayBuffer(4); const view = new Unit32Array(sharedArrayBuffer); //在索引0处写入10 Atomics.store(view,0,10); //从索引0处读取值,然后在索引0处写入5 console.log(Atomics.exchange(view,0,5));//10 //从索引0处读取值 console.log(Atomics.load(view,0));//5 

在多线程程序中,一个线程可能只希望在上次读取某个值之后没有其他线程修改该值得情况下对共享缓冲区执行写操作。如果这个值没有被修改,这个线程就可以安全地写入更新后的值:如果这个值被修改了,那么执行写操作将会破坏其他线程计算的值。对于这种任务,Atomics API提供了compare-Exchange()方法。这个方法只在目标索引处的值与预期值匹配时才会执行写操作。

4、原子Futex操作与加锁

三、跨上下文消息

跨文档消息,有时候也称XDM(cross-document messaging),是一种在不同执行上下文(例如不同工作线程或不同源的页面)间传递信息的能力。

四、Encoding API

Encoding API主要用于实现字符串与定型数组之间的转换。

五、File API和Blob API

1、File类型

File API仍然以表单中的文件输入字段为基础,但是增加了直接访问文件信息的能力。HTML5在DOM上为文件输入元素增加了files集合。当用户在文件字段中选择一个或多个文件时,这个files集合中会包含一组File对象,表示被选中的文件,每个File对象都有一些只读属性。

2、FileReader类型

FileReader类型表示一种异步文件读取机制,可以把FileReader想象成类似于XMLHttpRequest,只不过用于从文件系统读取文件,而不是从服务器读取数据。FileReader类型提供了几个读取文件数据的方法。

  1. readAsText(file,encoding);//从文件中读取纯文本内容并保存在result属性中
  2. readAsDataURL(file);//读取文件并将内容的数据URI保存在result属性中
  3. readAsBinaryString(file);//读取文件并将每个字符的二进制数据保存在result属性中
  4. readAsArrayBuffer(file);//读取文件并将文件内容以ArrayBuffer形式保存在result属性中

3、FileReaderSync类型

FileReader类型的同步版本。

4、Blob与部分读取

六、Streams API

1、应用场景

Streams API 是为了解决一个简单但又很基础的问题而生的:Web应用如何消费有序的小信息块而不是大块信息?这种能力主要有两种应用场景。

  1. 大块数据可能不会一次性都可用。网络请求的响应就是一个典型的例子。网络负载是以连续信息包形式交付的,而流式处理可以让应用在数据一到达就能使用,而不必等到所有数据都加载完毕。
  2. 大块数据可能需要分小部分处理。视频处理、数据压缩、图像编码和JSON解析都是可以分成小部分进行处理,而不必等到所有数据都在内存中再处理的例子。

2、理解流

Streams API定义了三种流:

  1. 可读流:可以通过某个公共接口读取数据块的流。数据在内部从底层源进入流,然后由消费者consumer进行处理。
  2. 可写流:可以通过某个公共接口写入数据块的流。生产者(consumer)将数据写入流,数据在内部传入底层数据槽(sink)。
  3. 转换流:由两种流组成,可写流用于接收数据,可读流用于输出数据。这两个流质检是转换程序(transformer),可以根据需要检查和修改流内容。

七、Web Cryptography API

八、JavaScript知识体系合集

九、JavaScript思维导图

在这里插入图片描述

十、关注公众号哪吒编程,回复1024,获取Java学习资料,还有不定期的送书活动

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202411.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午7:12
下一篇 2026年3月20日 上午7:12


相关推荐

  • realloc函数最详细解释

    realloc函数最详细解释realloc 函数语法原型 externvoid realloc voidmem address unsignedintn 指针名 数据类型 realloc 要改变内存大小的指针名 新的大小 新的大小可大可小 如果新的大小大于原内存大小 则新分配部分不会被初始化 如果新的大小小于原内存大小 可能会导致数据丢失 1 2 头文件 include amp amp amp amp amp amp amp lt

    2026年2月26日
    2
  • 小清新豆包AI大模型教程概述PPT模板人工智能AIGC演示幻灯片.pptxVIP

    小清新豆包AI大模型教程概述PPT模板人工智能AIGC演示幻灯片.pptxVIP

    2026年3月12日
    2
  • js 数组倒序排列

    <!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″><title>js倒序排列</title></head><body><script>vararray=[‘我’,’喜’,’欢’,…

    2022年4月4日
    90
  • knime3命令行执行方式

    knime3命令行执行方式D knime 3 2 1 plugins gt org eclipse equinox launcher 1 3 100 v 1540 jar applicationo knime product KNIME BATCH APPLICATION reset workflowFile C learner project knwf D knime 3 2 1

    2026年3月18日
    2
  • Flash–基础认识

    Flash–基础认识1 空间划分块 bank gt 扇区 sector gt 页 page 一般一个扇区 sector 多个页 page 一个块 bank 又有多个扇区 sector 2 举例以 W25Q128 为例 128Mbit 的容量 每页 256 字节 一共 65536 个字节 合计 65536 256 8 134 217 728bit 等于 134 217 728 1024 1024 128Mbit 每次编程数据为 256 字节 擦除可以按 16 页 即一个扇区擦除 4K 按 128 页擦除 3

    2026年3月26日
    2
  • 将图像转换为8位通道_imagej像素和毫米转换

    将图像转换为8位通道_imagej像素和毫米转换一背景遥感图像一般像素深度比较高,基本的就是unit16了,但是如果想在OpenCV中正确使用,而且不丢失数据RGB三通道信息,就需要转为unit8才能进行其他分析。二分析unit16的图像最大值为216-1=65535,而OpenCV中的图像最大值为28-1=255,当大于255时会自动变为255,这样数据信息就丢失了。下面代码采用的方式是线性缩放,将0到65535的数值线性缩…

    2025年12月13日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号