【问题标题】:How to delimit/split strings in an array of bytes如何在字节数组中分隔/拆分字符串
【发布时间】:2018-04-22 19:44:03
【问题描述】:

我习惯于使用 JSON 来简单地存储字符串值,并且一切正常。现在我遇到了无法使用 JSON 并且需要将一组字符串存储在数组缓冲区中的情况。想知道将字符串分隔以处理边缘情况的做法是什么,例如:

  • 如果分隔符是双引号"string...",如果字符串"str"ing..."里面有引号怎么办。
  • 如果分隔符是随机的字符序列,例如--MYDELIMITER--,则有可能导致错误匹配(即某些字符串实际上包含该序列)。

我想的数组看起来像 JSON:

["123", "foo\"", "bar", "ba\"\"z"]

所以我很困惑如何在没有 JSON 的情况下做到这一点:

"123""foo\"""bar""ba\"\"z"

实际上我想做的是在一个字节数组中分离任意值,例如布尔值、JSON 日期、字符串和数字。

【问题讨论】:

    标签: arrays string parsing serialization


    【解决方案1】:

    你能 JSON.stringify() 一个字符串数组并将其写入缓冲区吗?如果您不需要在接收端将数据作为流使用,而是在最后使用 Json.parse 它,这可能是一个很好的解决方案。

    可以说任何 UNICODE 字符都可以以十六进制表示法的形式存在于数据中。您可以创建(实际上)唯一的分隔符,但这会使您的数据更大。

    在任何情况下都可以使用的一个解决方案是创建一个 Uint16Array,它在索引 0 处存储第一个字符串的长度,然后在每个位置存储包含 string.charCodeAt(position) 的 [length] 个项目,然后是长度第二个字符串和后续 [length] 项上的所有字符代码等。基本上是 Pascal string 实现。

    【讨论】:

    • 哇哦,帕斯卡字符串的想法很棒。链接说它只存储 1 个单位的长度信息,这是否意味着如果字符串大于 65,536 它将不起作用?
    • JSON 的想法可行,但希望避免使用 JSON,而是从头开始。
    • 是的,但您也可以使用 Uint32Array 并在每个位置存储 2 个字符,这样就不会浪费空间。这将为您提供 4 倍的上限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2012-03-15
    • 1970-01-01
    • 2011-12-22
    • 2023-03-20
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多