Ruby 2.7.3生成.rxdata的Marshal字节流索引9位置0D字节作用查询
问题结论
这个0x0D字节不属于Ruby Marshal序列化规则的原生内容,是Windows平台文本模式写文件产生的额外转义字符。
具体原因
- 你在调用
File.open写入rxdata文件时使用了默认的"w"文本模式,Windows平台的文本模式下,所有待写入的字节流如果检测到0x0A(换行符LF),会自动在其前方插入0x0D(回车符CR),将单LF换行转换为Windows标准的CRLF换行格式。 - 你观察到的索引9位置的
0x0D,就是插入在原有Marshal输出的0x0A字节前的额外字符,和Marshal本身的序列化规则无关。
修复方案
将写文件的模式改为二进制写入"wb"即可避免自动转义:
file = File.open("./users.rxdata", "wb")
修改后重新生成的文件就不会出现多余的0x0D字节,你也可以直接打印Marshal.dump(A.new).bytes验证原始序列化结果中不存在该字节。
内容的提问来源于stack exchange,提问作者januw a
相关产品推荐
相关产品推荐

