Content

Golang读写二进制文件方法总结(golang 读取环境变量)学会了吗

文章摘要

这篇文章介绍了如何在Golang中使用`encoding/gob`和`encoding/binary`包读写二进制文件。`encoding/gob`适用于标准的二进制序列化,代码简洁但不支持自定义格式,而`encoding/binary`提供了更强大的功能,支持数字、字节序列和`varints`编码,适合自定义二进制格式的需求。文章通过示例展示了如何使用这两种包进行序列化和反序列化操作,并补充了相关资源。重点在于比较两者的适用场景和错误处理方法。



使用 Golang 的 encoding/gob 包读写二进制文件非常方便,而且代码量也非常少。但是在需要自定义二进制格式(自定义二进制格式有可能做到更紧凑的数据表示和更快的读写速度)的场景下,这个包就不适用了,这时候就需要使用到 encoding/binary 包了。

encoding/binary 包实现了数字(number)和字节序列(byte sequences)之间的简单转换以及 varints 的编码和解码,varints 是一种使用一个或多个字节表示整型数据的方法,其中数值本身越小,其所占用的字节数越少。

接下来演示一下序列化数据后保存到本地,再反序列化本地的数据。

序列化数据后保存到本地

package main import ( “bytes” “encoding/binary” “fmt” “os” ) type User struct { Age int32 } funcmain() { file, err :=os.Create(“bin”) if err !=nil { fmt.Println(“文件创建失败 “, err.Error()) return } defer file.Close() for i :=1; i <=10; i++ { data :=User{ int32(i), } var buf bytes.Buffer binary.Write(&buf, binary.LittleEndian, data) b :=buf.Bytes() _, err=file.Write(b) if err !=nil { fmt.Println(“写入失败”, err.Error()) return } } fmt.Println(“序列化成功”) }

反序列化本地的数据

package main import ( “bytes” “encoding/binary” “fmt” “os” ) type User struct { Age int32 } funcmain() { file, err :=os.Open(“bin”) if err !=nil { fmt.Println(“文件打开失败 “, err.Error()) return } defer file.Close() data :=User{} for i :=1; i <=10; i++ { b :=make([]byte, 4) _, err=file.Read(b) if err !=nil { fmt.Println(“反序列化失败”, err) } buffer :=bytes.NewBuffer(b) err=binary.Read(buffer, binary.LittleEndian, &data) if err !=nil { fmt.Println(“二进制文件读取失败”, err) return } fmt.Println(“第”, i, “个值为:”, data) } }

更多关于 encoding/binary 的内容请参考此包的源代码。

补充

除了上文的方法,下面小编还为大家整理了encoding/gob 包读写二进制文件的其他方法

gob是Golang自带的一个数据结构序列化的编码/解码工具,和JSON、XML、Google 的 protocol buffers类似。gob编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。

接下来演示一下序列化数据后保存到本地,再反序列化本地的数据。

序列化数据后保存到本地

package main import ( “encoding/gob” “fmt” “os” ) func main() { data :=”测试读写二进制文件” file, err :=os.Create(“bin”) // 创建文件 if err !=nil { fmt.Println(“文件创建失败”, err.Error()) return } defer file.Close() encoder :=gob.NewEncoder(file) err=encoder.Encode(data) if err !=nil { fmt.Println(“编码错误”, err.Error()) return } }

反序列化本地的数据

package main import ( “encoding/gob” “fmt” “os” ) func main() { file, err :=os.Open(“bin”) if err !=nil { fmt.Println(“文件打开失败”, err.Error()) return } defer file.Close() decoder :=gob.NewDecoder(file) var data string err=decoder.Decode(&data) if err !=nil { fmt.Println(“解码失败”, err.Error()) return } fmt.Println(data) }

到此这篇关于Golang读写二进制文件方法总结的文章就介绍到这了,更多相关Golang读写二进制文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:Go语言二进制文件的读写操作Golang项目在github创建release后自动生成二进制文件的方法golang 如何删除二进制文件中的源码路径信息go 读取BMP文件头二进制读取方式Golang二进制文件混淆保护操作减少 golang 二进制文件大小操作Go打包二进制文件的实现