Rust 按特定字节拆分字节向量

标签 rust

我有一个包含要加载到应用程序中的信息的文件。该文件有一些标题信息作为字符串,然后是多个以“;”结尾的条目一些条目用于不同的类型,因此长度是可变的,但所有变量都用“,”分隔
例子:

\Some heading
\Some other heading

I,003f,3f3d00ed,"Some string",00ef,
0032,20f3
;

Y,02d1,0000,0000,"Name of element",
00000007,0,

00000000,0,
;

Y,02d1,0000,0000,"Name of element",30f0,2d0f,02sd,
00000007,0,

00000000,0,
;
I 是一种元素
Y 是另一种类型的元素
我想要实现的是,将元素带入不同的结构中以进行处理。大多数值是数字,但有些是字符串。
我能够实现的是:
  • 将文件导入为 Vec
  • 把它放在一个字符串中(不能直接这样做,因为我不感兴趣的元素中可能存在 UTF-8 问题)
  • 通过 ';' 将其拆分为 Vec<&str>
  • 根据类型将字符串传递给函数
  • 通过 '\n'
  • 将其拆分为 Vec
  • 通过 ',' 将其拆分为 Vec
  • 读出我需要的数据并从字符串中解释(例如 str::from_str_radix)
  • 构建结构并返回它

  • 这似乎不是要走的路,因为我从字节开始,将它们分配为字符串,然后再次为大多数值分配数字。
    所以我的问题是:
    我可以将 Vec 拆分为多个由 ';' 分隔的向量吗(字节 59),将这些进一步拆分为 '\n' 并进一步拆分为 ','。
    我认为将字节直接应用于正确的数据类型会更高效。还是我的担心是错误的?

    最佳答案

    Can I split the Vec into multiple vectors separated by ';' (byte 59), split these further by '\n' and split this further by ','.


    如果其他字节可能出现在其他地方,例如嵌入在字符串中,通常这将不起作用。
    然后还有字符串如何编码的问题,是否有转义序列等等。

    I assume it would be more performant to apply the bytes directly to the correct data-type. Or is my concern wrong?


    将整个文件读入内存,然后从一个 Vec 执行多个副本到另一个 Vec另一个等等将比使用某种状态机的单次传递慢。更不用说它会使处理大于内存的文件变得极其缓慢或不可能。
    在您拥有可工作的算法之前,我不会担心性能,特别是如果您必须使用未记录的、非平凡的第三方格式并且您没有阅读二进制格式的经验。

    关于Rust 按特定字节拆分字节向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64938809/

    相关文章:

    c++ - 为什么 Rust 需要 C++ 工具链来生成 Rust 二进制文件,而像 Go 这样的语言没有这个要求?

    rust - 什么时候延长 Arenas 引用的生命周期是安全的?

    rust - 无法将特征方法纳入范围

    rust - 如何解包 &Result<_,_>?

    rust - 通用生命周期参数中的 'a: ' a 是什么意思?

    reference - 不能借用为可变的,因为它也被借用为不可变的

    rust - 具有相同值的多个枚举变体?

    rust - 如何使用自定义 libstd 进行构建?

    rust - 遍历选项的内容或特定值

    python - 将 Python 列表传递给嵌入式 Rust 函数