Go读取二进制文件分三类:小文件用ioutil.ReadFile;大文件用os.Open+io.ReadFull分块读;有固定结构用encoding/binary.Read解析头再读负载;修改时应读-改-写新文件而非原地覆盖。
Go语言读取二进制文件非常直接,核心是用os.Open打开文件,再用io.ReadFull或bytes.ReadFrom等方法按需读取原始字节,避免任何文本编码解析。
适合配置、图片、小体积二进制数据(如图标、密钥文件):
ioutil.ReadFile("data.bin")返回[]byte和错误
件适合处理视频、音频、数据库快照等大体积二进制数据:
f, err := os.Open("large.bin"),记得defer f.Close()
buf := make([]byte, 4096)
n, err := f.Read(buf),每次读取最多len(buf)字节buf[:n]访问本次有效数据,err == io.EOF表示读完若文件有固定结构(如前8字节是长度、后跟原始数据),可用binary.Read:
"encoding/binary"
type Header struct { Size uint32; Magic [4]byte }
binary.Read(f, binary.LittleEndian, &header)按指定字节序解析io.ReadFull(f, payload)读取后续原始负载修改二进制文件通常应“读-改-写新文件”,而非原地覆盖:
os.Create("output.bin")新建输出文件f.Write(data)写入修改后的[]byte或逐段写入os.OpenFile(..., os.O_RDWR)原地修改,易破坏结构且不可逆os.Truncate调整大小,但仅限明确知道后果的场景