Chromium 中JavaScript FileReaderSync API接口c++代码实现

news2024/10/6 21:49:16

FileReaderSync

备注: 此特性仅在 Web Worker(不包括 Service Worker)中可用。

FileReaderSync 接口允许同步读取 File 或 Blob 对象。此接口仅在 worker 中可用,因为它支持可能导致潜在的阻塞的同步 I/O。

构造函数

FileReaderSync()

返回一个新的 FileReaderSync 对象。

实例属性

该接口没有任何属性。

实例方法

FileReaderSync.readAsArrayBuffer()

此方法将指定的 Blob 或 File 转换为将输入数据表示为二进制字符串的 ArrayBuffer。

FileReaderSync.readAsBinaryString() 已弃用

此方法将指定的 Blob 或 File 转换为表示输入数据的二进制字符串。此方法已弃用,请考虑使用 readAsArrayBuffer() 代替。

FileReaderSync.readAsText()

此方法将指定的 Blob 或 File 转换为将输入数据表示为文本字符串的字符串。可选的 encoding 参数指示要使用的编码(例如,iso-8859-1 或 UTF-8)。如果不存在,该方法将对其应用检测算法以确定其编码。

FileReaderSync.readAsDataURL()

此方法将指定的 Blob 或 File 转换为将输入数据表示为 data URL 的字符串。

FileReaderSync在c++代码中实现:

1、FileReaderSync接口定义 third_party\blink\renderer\core\fileapi\file_reader_sync.idl 

     

/*
 * Copyright (C) 2010 Google Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

// https://w3c.github.io/FileAPI/#FileReaderSync

[
    Exposed=(DedicatedWorker,SharedWorker)
] interface FileReaderSync {
    [CallWith=ExecutionContext, Measure] constructor();
    [RaisesException] ArrayBuffer readAsArrayBuffer(Blob blob);
    [RaisesException] DOMString readAsBinaryString(Blob blob);
    [RaisesException] DOMString readAsText(Blob blob, optional DOMString label);
    [RaisesException] DOMString readAsDataURL(Blob blob);
};

2、FileReaderSync接口接口实现

third_party\blink\renderer\core\fileapi\file_reader_sync.h

third_party\blink\renderer\core\fileapi\file_reader_sync.cc

/*
 * Copyright (C) 2010 Google Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FILEAPI_FILE_READER_SYNC_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_FILEAPI_FILE_READER_SYNC_H_

#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
#include "third_party/blink/renderer/core/fileapi/file_reader_client.h"
#include "third_party/blink/renderer/core/fileapi/file_reader_data.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"

namespace base {
class SingleThreadTaskRunner;
}

namespace blink {

class Blob;
class DOMArrayBuffer;
class ExceptionState;
class ExecutionContext;

class FileReaderSync final : public ScriptWrappable {
  DEFINE_WRAPPERTYPEINFO();

 public:
  static FileReaderSync* Create(ExecutionContext* context) {
    return MakeGarbageCollected<FileReaderSync>(context);
  }

  explicit FileReaderSync(ExecutionContext*);

  DOMArrayBuffer* readAsArrayBuffer(Blob*, ExceptionState&);
  String readAsBinaryString(Blob*, ExceptionState&);
  String readAsText(Blob* blob, ExceptionState& ec) {
    return readAsText(blob, "", ec);
  }
  String readAsText(Blob*, const String& encoding, ExceptionState&);
  String readAsDataURL(Blob*, ExceptionState&);

  void Trace(Visitor* visitor) const override {
    ScriptWrappable::Trace(visitor);
  }

 private:
  absl::optional<FileReaderData> Load(const Blob&, ExceptionState&);

  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
};

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_FILEAPI_FILE_READER_SYNC_H_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2192985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv11改进 | 卷积模块 | 分布移位卷积DSConv替换Conv

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文介绍DSConv&#xff0c; DSConv 将…

算法1:双指针思想的运用(2)--C++

1.盛水最多的容器 题目链接&#xff1a;11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 在解析题目时&#xff0c;我们可以把最直接的方法先列举出来&#xff0c;然后再根据相应的算法原理&#xff0c;来进行优化 思路一&#xff1a;暴力…

Docker 启动 Neo4j:详细配置指南和浏览器访问

Docker 启动 Neo4j&#xff1a;详细配置指南和浏览器访问 文章目录 Docker 启动 Neo4j&#xff1a;详细配置指南和浏览器访问一 Neo4j compose 得 yml 配置二 配置描述三 浏览器访问 这篇文章详细介绍了如何使用 Docker Compose 启动 Neo4j 数据库&#xff0c;包括 docker-com…

菜鸟笔记003 获取目标对象的颜色值

在illustrator中,我们时常要获取一些对象的颜色值,但是一时不知道如何获取,下面我就来讲讲如何获取目标对象的颜色值。 下面以选择对象的最上层对象为例,我们通过查阅javascript编程手册,可以很容易获取下面代码: var sel=app.activeDocument.selection[0]; //获取最上…

【S32K3 RTD MCAL 篇1】 K344 KEY 控制 EMIOS PWM

【S32K3 RTD MCAL 篇1】 K344 KEY 控制 EMIOS PWM 一&#xff0c;文档简介二&#xff0c; 功能实现2.1 软硬件平台2.2 软件控制流程2.3 资源分配概览2.4 EB 配置2.4.1 Dio module2.4.2 Icu module2.4.4 Mcu module2.4.5 Platform module2.4.6 Port module2.4.7 Pwm module 2.5 …

SCTF2024(复现)

SCTF2024&#xff08;复现&#xff09; web SycServer2.0 开题&#xff1a; 需要登录&#xff0c;进行目录扫描&#xff0c;得到/config&#xff0c;/hello&#xff0c;/robots.txt 等&#xff0c;访问/hello 显示需要 token&#xff0c;查看源码发现存在 sqlwaf 可以通过抓…

基于ucontext库实现协程类

文章目录 前言协程基础知识协程上下文对称协程与⾮对称协程有栈协程与⽆栈协程 ucontext库接口熟悉一个简单的函数切换自动调用 协程类的实现接口全局变量线程局部变量malloc封装协程切换构造函数协程执行的方法 测试协程切换手动切换复用 前言 协程&#xff08;Coroutine&…

Maven安装使用

说明&#xff1a;Maven是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。一般来说&#xff0c;它帮助我们管理依赖、构建项目。本文介绍在Windows系统下安装Maven。 下载&安装&验证 下载 首先&#xff0c;在Maven官网&#xff08;https:…

【第十五周】PyTorch深度学习实践2

目录 摘要Abstract1.多分类问题1.1.Softmax1.2.维度问题1.3.NLLLoss v.s. CrossEntropy1.4.代码实践1.4.1.导入相应的包1.4.2.准备数据集1.4.3.模型设计1.4.4.构造损失和优化器1.4.5.模型训练 2.卷积神经网络基础篇2.1.代码实践2.1.1.导入相应的包&#xff1a;2.1.2.准备数据集…

我谈巴特沃斯滤波器

目录 写在前面的内容我谈巴特沃斯滤波器巴特沃斯滤波器的幅频响应频率变换巴特沃斯各种滤波器例子 写在前面的内容 先看看冈萨雷斯对巴特沃斯滤波器的介绍。 低通 高通 带阻 带通 第一个问题&#xff0c;截止频率处的增益。 0.5的增益是不是陡度小了&#xff1f;巴特沃…

ai智能论文生成系统有用吗?分享5款ai文献综述自动生成器

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在学术写作领域的应用越来越广泛&#xff0c;尤其是在文献综述的自动生成方面。AI智能论文生成系统通过深度学习和自然语言处理技术&#xff0c;能够帮助研究人员快速生成高质量的文献综述&#xff0c;从而提高写作效…

深度扩展AntSK,让.NET Aspire助力您的AI项目

引言 在现今飞速发展的技术世界中&#xff0c;引用最新的工具和框架来提升项目的性能和可管理性至关重要。作为一名开发者&#xff0c;我最近在自己的AI知识库项目AntSK中集成了.NET Aspire&#xff0c;这为我的项目注入了新的活力。如果你还不清楚什么是.NET Aspire&#xff0…

[单master节点k8s部署]32.ceph分布式存储(三)

基于ceph rbd生成pv 在集群中认证ceph 用下面代码生成ceph的secret .创建 ceph 的 secret&#xff0c;在 k8s 的控制节点操作&#xff1a; 回到 ceph 管理节点创建 pool 池&#xff1a; [rootmaster1-admin ~]# ceph osd pool create k8stest 56 pool k8stest created [rootm…

BERT论文解读及情感分类实战(论文复现)

BERT论文解读及情感分类实战&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 BERT论文解读及情感分类实战&#xff08;论文复现&#xff09;简介BERT文章主要贡献BERT模型架构技术细节任务1 Masked LM&#xff08;MLM&#xff09;任务2 N…

【web安全】——常见框架漏洞

1.ThinkPHP框架漏洞 thinkphp是一个国内轻量级的开发框架&#xff0c;采用phpapache&#xff0c;在更新迭代中&#xff0c;thinkphp也经常爆出各种漏洞&#xff0c;thinkphp一般有thinkphp2、thinkphp3、thinkphp5、thinkphp6版本&#xff0c;前两个版本已经停止更新&#xff…

【详细教程】如何使用YOLOv11进行图像与视频的目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

m4a怎么转换成mp3?音频转换MP3只需要这6个小工具!

m4a怎么转换成mp3&#xff1f;M4A和MP3是两种常见的音频格式&#xff0c;M4A通常使用AAC&#xff08;高级音频编码&#xff09;进行压缩&#xff0c;提供更高的音质和更小的文件体积&#xff0c;特别适合在Apple设备上使用。而MP3则以其高压缩比和广泛的兼容性著称&#xff0c;…

TM1618数码管控制芯片使用共阳极数码管过程中的问题和解决办法

控制芯片的基本了解 相比于不用控制芯片的电路&#xff1a;这里带2根电源线和3个信号线&#xff0c;共使用了5根线&#xff0c;但可以控制4个8段数码管显示。若是电路直接控制4个8段数码管需要84113个接口&#xff0c;这对于MCU的珍贵引脚简直是浪费。 这里不会出现余晖效应也…

大花蔷薇T2T基因组-60

Multi-omics analyzes of Rosa gigantea illuminate tea scent biosynthesis and release mechanisms 多组学分析揭示了大花蔷薇茶香合成及释放机制 摘要 玫瑰是一种全球广泛栽培的重要观赏作物&#xff0c;用于香水生产。然而&#xff0c;由于缺乏茶玫瑰的参考基因组&#x…

鸿蒙开发(NEXT/API 12)【穿戴设备传感器获取】手机侧应用开发

手机侧应用可以通过Wear Engine获取穿戴设备上的传感器信息&#xff0c;并通过打开、关闭命令控制获取传感器数据。 使用传感器相关接口前&#xff0c;需要向手机侧用户申请获取对应权限的授权 传感器类型申请权限ECG、PPG、HR[HEALTH_SENSOR]人体传感器ACC、GYRO、MAG[MOTIO…