二进制与文本文件
#序列化 #二进制
一些不懂的概念 问ai可能会使你导致晕头转向 用搜索 寻找和你有相同疑惑的问题 听取交流 常常就能理解!
序列化的作用就是:
定义一个规则,把这个结构体 → 转换成跨平台都能理解的线性字节流,并且可以反向恢复。
type User struct {
ID int
Name string
}
如果直接写内存到磁盘 在机器 A 可能是 [4字节ID][指针地址][字符串内容在别的地方],
在机器 B 这个地址没意义,读取就崩溃。
定义规则 → { "ID": 123, "Name": "Tom" } → UTF-8 编码 → 字节流。
任何机器/语言只要会解析 JSON,就能还原出 User。
理解序列化和二进制:
序列化不是“只要变成二进制”,而是有规则地变,保证跨平台、跨语言可以理解。数据可以被传输到另一个数据存储例如一个内存计算平台、应用程序或其它目的地。
JSON 也是序列化(文本化的规则),Protobuf 也是序列化(紧凑的规则)
文本序列化 → “先变成人能读的文本,再编码”。(JSON)
二进制序列化 → “直接写成机器优化过的格式,不考虑人类可读性”(二进制序列化)
所以:
“现在来说你的问题,为什么我们不能直接将数据存储为二进制大块?答案是当然可以。这种方法的缺点是,读取你数据的东西必须确切知道存储的结构是什么。如果你改变了结构,那你就没辙了。如果你在 32 位和 64 位架构之间切换,可能也没辙了。想通过某种连接发送它?你的数据中可能有某种保留符号,比如 EOF 或'\0'。”