如果我要将文件内容读入数组,是否需要初始化数组?

2024-02-29

我正在初始化buf在立即用以下内容重写其内容之前不必要地全为零read_exact:

fn parse<R: Read>(r: &mut R) -> Result<()> {
    let mut buf = [0u8; 1024];
    r.read_exact(&mut buf)?;
    // Do things to buf
    Ok(true)
}

虽然我不认为0初始化很耗时,但似乎没有必要。有没有解决的办法?


是的,安全 Rust 中需要这样的初始化。编译器不一定能够知道组合 of read_exact and ?将阻止访问数组中任何未初始化的数据。优化过程可能会使其变得更好,但不能指望它起作用。

你可以改为读入Vec,它在内部保证永远不允许访问未初始化的内存:

fn parse<R: Read>(r: &mut R) -> io::Result<()> {
    let mut buf = vec![]; // Can optionally use `Vec::with_capacity`
    r.take(1024).read_to_end(&mut buf)?;
    // Do things to buf
    Ok(())
}

在不安全的 Rust 中,你可以使用mem::uninitialized。在选择这种情况之前,请确保您了解所涉及的所有可怕的细微差别!读取未初始化的内存是 Rust 中未定义的行为,所以you必须绝对确保防止这种情况发生。

在这里,我们依靠:

  1. 事实是read_exact如果未填充所有字节,将返回错误。
  2. 事实是析构函数 of [u8; 1024]不会读取字节。这是发生错误或引发恐慌时需要考虑的重要途径。
fn parse<R: Read>(r: &mut R) -> io::Result<()> {
    unsafe {
        let mut buf: [u8; 1024] = mem::uninitialized();
        r.read_exact(&mut buf)?;
        // Do things to buf
    }
    Ok(())
}

如果没有大量的分析,我认为这是不值得的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我要将文件内容读入数组,是否需要初始化数组? 的相关文章

  • 有效地合并两个数组 - 一个已排序,另一个未排序

    我正在解决一个问题 该问题有一个由 n 个元素组成的排序数组 后跟一个未排序的长度数组 O logn O 平方 n 如何最有效地对整个列表进行排序 在上述两种情况下我应该使用哪种排序 由于将单个元素插入数组并保持其排序是O n 你不可能变得
  • 将字符缓冲区连接成字符串

    在下面的代码片段中 我接收数据 直到完全接收到来自套接字客户端的所有数据 我继续将数据存储在大小为 300 的字符缓冲区中 ssize t b char buffer 300 while b recv socket fd buffer si
  • 如何使用 getJSONArray 方法访问 json 对象的嵌套元素

    我有一个 JSON 响应 如下所示 result map entry key xsi type xs string ContentA value fsdf key xsi type xs string ContentB value dfdf
  • 如何在 Rust 中从文字创建格式化字符串?

    我将根据给定的参数返回一个字符串 fn hello world name Option
  • Java 从 SQL 数组获取 ResultSet 失败

    我试图从数据库中检索电子邮件地址 但没有成功 我的代码如下 Main System out println PortfolioData getEmails 58 So Far Returning null 投资组合数据 public sta
  • C:将 unsigned char 数组转换为signed int(反之亦然)

    我正在尝试将无符号字符数组缓冲区转换为有符号整数 反之亦然 下面是演示代码 int main int argv char argc int original 1054 unsigned int i 1054 unsigned char c
  • 匹配数组中的对象并合并

    UPDATE 我有一个名为的对象数组cars包含 li 标签 其中包含有关汽车的属性数据 例如价格 汽车类型等 我的目标是 如果这些汽车符合某些标准 则将它们合并到一个列表中 要求 快速性能 保持相同的汽车数组结构 Main Goal Ma
  • VB - 如何读取和写入二进制文件?

    如何从任何文件读取原始字节数组 Dim bytes as Byte 然后将该字节数组写回到新文件中 我需要它作为字节数组来在两者之间进行一些处理 我目前正在使用 To read Dim fInfo As New FileInfo dataP
  • char* argv[] 在 c/c++ 中如何工作? [复制]

    这个问题在这里已经有答案了 我知道它用于使用命令行中的参数 但我没有得到声明 字符 argv 它是否意味着指向 char 数组的指针 如果是的话为什么没有大小 如果不是动态数组 就不需要有大小吗 我做了一些研究 发现有人说它会衰减为 cha
  • 如何复制 ArrayIterator 以保留其当前迭代位置?

    因为这似乎是我必须做的才能达到这种效果 arr a gt first b gt second iter new ArrayIterator arr Do a bunch of iterations iter gt next new iter
  • 具有指向其自身数据的切片的结构

    我有一个结构 struct Foo lt a gt buf u8 64 slice a u8 该切片应该指向buf结构体的字段 有什么方法可以构造这样的结构吗 就像是 impl lt a gt Foo lt a gt fn new gt F
  • 将 Javascript 对象的属性从 string 更改为 int

    我有一个对象数组 每个对象具有三个属性 年份 总计 人均 例子 0 Object per capita 125 8 total 1007 2 year 2009 这些属性是字符串 我想创建一个循环来遍历数组并将它们转换为 int 我尝试了以
  • 关于 ArrayList[] x 的 Java 问题

    我一直对 ArrayList 数组有这个问题 也许你能帮忙 declare in class private ArrayList
  • 从 C 数组中删除大量元素的最快方法

    我有包含数千个甚至更多元素的动态数组 为了不消耗大量内存 我可以从中删除不需要的元素 即元素已被使用 不再需要它们 所以从一开始我可以通过估计每次删除元素后所需的最大大小来分配较小的内存大小 我用这个方法但是需要很长很长的时间才能完成 有时
  • 有没有一种方法可以“展平”Rust 中的(反)序列化枚举?

    我有一个由其他枚举组成的枚举 类似于以下内容 serde为简洁起见 省略了派生和注释 enum Main A SubA B SubB enum SubA X1 X2 X3 enum SubB Y1 Y2 Y3 我很想能够使用serde反序列
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • 用于解析 Rust 中的匹配臂的递归宏

    我正在尝试编写一个宏来将一组规则扩展为执行标记匹配的代码 但无法在不导致宏扩展错误的情况下生成正确的代码 我知道我可以通过其他方式处理这个问题 但这里的关键问题不是如何解析令牌 而是如何编写一个可以使用匹配臂递归扩展令牌树的宏 这个想法是我
  • 比较数组中的文件、从文本文件中删除行、函数、日志记录

    所以我创建了这两个数组 Approved Shares 和 Current Shares Reads Approvedshare txt and makes the txt file into an array public objFSO

随机推荐

  • 为什么我未完成的 JavaScript 游戏在第三次死亡后崩溃了?

    Commented because does not work in Sandbox window localStorage Ignore this line Where all my variables have been assigne
  • 获取 R 中帮助文档的(网络)URL?

    在 RStudio 中使用类似内容打开帮助文档时 function 我们如何 轻松 获得这些帮助文档的网页版 目前 我正在寻找一个独特的句子 并用引号搜索它 例如 要查找网络版本 function 我用谷歌搜索了 These functio
  • java中的batchGetItem API错误

    我正在查询的实体有一个HashKey ARangeKey 数字 当我使用batchGetItem就它而言 我收到以下错误 AWS 错误代码 ValidationException AWS 错误消息 一个或多个参数值无效 位置和架构之间的属性
  • React.js 实现菜单[突出显示活动链接]

    以下 React js 代码呈现一个导航栏 其中包含两个名为 about 和 project 的链接 页面加载时 关于 链接处于活动状态并呈红色 单击另一个链接时 导航栏的状态将设置为 项目 关于 链接样式将被设置回来 并且 项目 将显示为
  • 使用 :after 在元素后添加空格 (" ")

    我想在一些内容后面添加一个空格 但是content 似乎不起作用 这是我的代码 h2 after content 这不起作用 但是这确实有效 h2 after content 我究竟做错了什么 事实证明它需要通过转义的 unicode 来指
  • AJAX响应需要转换为blob

    我已经编写了ajax代码来设置请 求标头url并将其转换为 blob 并传递给函数showFile blob The blob然后以 pdf 格式处理并下载 这blob代码中获得的值如下undefined 有人可以帮我解决这个问题吗 var
  • 如何打印文件中的特定行

    我正在尝试打印文件 Scores 中的特定行 即选项 B 这是我的代码 print Option A Show all scores nOption B Show a record nOption Q Quit decision input
  • AWS Lambda 和 RDS 之间间歇性超时

    我们目前正在经历我只能描述为随机间歇AWS Lambda 和 RDS 之间的超时 部署我们的函数并成功运行它们后 它们可以随机切换到超时状态无需更改配置 值得注意的是 我们还在监视数据库连接 并可以确认我们没有遇到最大连接问题 以下是我们设
  • 表单右上角带有X的按钮,如何捕获此事件@C#

    当我使用 X 按钮关闭表单时会触发哪个事件 我想要仅在按下 X 按钮时触发的事件 我知道有一个 FormClosing 事件 但问题是每次关闭表单时都会触发它 当frm close 执行 我不希望这种情况发生 您可以检查 FormClosi
  • Angularjs 使用电子邮件类型重置表单字段

    在 AngularJs 中 似乎当您尝试通过将所有模型设置为空对象来 重置 表单时 如果输入是type email 这并没有得到清除 将其更改为type text 但是可以工作 但是您会在验证时丢失红色边框 是否有办法重置或清除电子邮件类型
  • 按元素长度对字符串数组进行排序

    拥有一个字符串数组 如何更新它 以便其元素按其长度排序 我正在尝试 string arr aa ss a abc arr arr OrderBy aux gt aux Length 所以 我会得到a aa ss abc 但它说 无法隐式转换
  • JVM JIT 诊断工具和优化技巧

    我听说过很多关于 JVM JIT 的内容can这样做 但没有看到很多关于如何分析 JIT 在程序的给定运行中实际执行的操作的信息 有很多使用技巧 XX PrintCompilation and XX PrintOptoAssembly但它会
  • 如何使用 Python Selenium Webdriver 在 Chrome 中加载默认配置文件?

    我想使用 Python 的 webdriver 启动 Chrome 及其默认配置文件 以便 cookie 和站点首选项在会话中保持不变 我怎样才能做到这一点 这就是它最终为我工作的原因 from selenium import webdri
  • 忘记旧的 WiFi Direct 连接

    有没有办法忘记旧的 WiFi Direct 连接 在代码中 我需要这个来更改谁成为群组所有者 我设置 groupOwnerIntent 15 但尚未成为组所有者 如果您只想断开与现有的连接WiFiP2p连接 然后只需调用WiFiP2pMan
  • 将大量数据加载到数组中的最快方法

    我在 stackexchange 中广泛搜索了一个将巨大 2GB dat 文件加载到 numpy 数组中的简洁解决方案 但没有找到合适的解决方案 到目前为止 我设法以非常快的方式 list f open myhugefile0 for li
  • C++ 在张量流中使用 Eigen

    张量流和特征值之间有什么关系 特别是关于tensor数据结构 有一些较旧的引文 例如 其中指出tensorflow正在广泛使用Eigen 据我所知 tensorflow人员已经扩展了Eigen代码 然而 最近的张量流文档似乎没有明确提及 E
  • SQL 2008 中的内存不足异常

    关于SQL Server 2008中Out of Memory异常 当我执行向表中插入数千行的大型查询时 执行此操作时发生的异常是 System OutOfMemoryException 根据一篇非常好的微软知识库文章 链接在这里 http
  • 如何获取 MongoDB 中的所有文档 ID?

    如何获取 MongoDB 中所有文档 ID 的数组 我只需要一组 id 但不需要文档内容 您可以通过调用在 Mongo shell 中执行此操作map http docs mongodb org manual reference metho
  • 为 MVC 应用程序添加尾部斜杠

    我正在构建一个基于 MVC 设计模式的应用程序 我希望我的 URL 如下 http example com page action http example com page action 我成功地让它与下面的代码一起工作 但如果 URL
  • 如果我要将文件内容读入数组,是否需要初始化数组?

    我正在初始化buf在立即用以下内容重写其内容之前不必要地全为零read exact fn parse