You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个文件中存储多个可能包含换行符的随机blob?

随机二进制Blob单文件存储解决方案

核心前提说明

由于你生成的是完全随机的无符号字符,0-255区间的所有值都可能出现,不存在“绝对不会出现在Blob中的分隔字符”,因此直接替换分隔符的方案不可行。

最优方案(单文件无额外依赖,优先选择)

方案1:转义编码方案

该方案通过转义规则彻底区分Blob内容中的换行和Blob分隔符,不需要额外文件:

  • 写入规则:
    1. 选定\(ASCII 0x5C)作为转义字符
    2. 遍历Blob的每个字节:
      • 遇到字节0x5C时,写入\\两个字节
      • 遇到字节0x0A(换行符)时,写入\n两个字节
      • 其余字节直接写入
    3. 单个Blob处理完成后,单独写入一个0x0A作为当前Blob的结束分隔符
  • 读取规则:
    1. 逐字节扫描文件内容:
      • 遇到0x5C时,读取下一个字节:若为0x5C还原为0x5C,若为0x6E还原为0x0A
      • 遇到未被转义的单独0x0A时,判定为当前Blob读取结束,开始处理下一个Blob
  • 优势:存储开销极低,随机Blob场景下平均额外存储开销仅为0.78%,完全单文件无依赖,符合你按行对应Blob的使用习惯。

方案2:固定长度前缀方案

该方案不需要转义处理,读写速度更快,适合对性能要求高的场景:

  • 写入规则:
    1. 每个Blob写入前,先写入1个固定4字节的uint32_t类型值,值为当前Blob的字节长度,提前约定好统一使用大端序或小端序避免跨平台解析问题
    2. 直接写入完整的Blob内容,不需要添加任何分隔符
  • 读取规则:
    1. 每次先读取4字节解析为长度N
    2. 再连续读取N个字节即为一个完整的Blob,循环直至文件读取完毕
  • 优势:无转义逻辑,读写性能拉满,同样是单文件无额外依赖,每个Blob仅固定增加4字节开销。

偏移文件方案的适用场景

只有当你需要随机读取指定序号的Blob时,单独的偏移文件才有价值:提前把所有Blob的起始偏移量存在偏移文件中,读取指定Blob时不需要遍历前面的内容,直接寻址即可。如果只是顺序读写所有Blob,偏移文件方案完全没有优势,还会额外增加一次IO访问。

内容的提问来源于stack exchange,提问作者Romy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:45:02