go基础库之读写二进制数据

本文讲解了如何以二进制形式编写和读取任何类型。

读写二进制数据

Golang 版本

1.12.1

前言

本文讲解了如何以二进制形式编写和读取任何类型。

实现

package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
)

func main() {
	// Writing binary values
	buf := bytes.NewBuffer([]byte{})
	if err := binary.Write(buf, binary.BigEndian, 1.004);
		err != nil {
		panic(err)
	}
	if err := binary.Write(buf, binary.BigEndian,
		[]byte("Hello")); err != nil {
		panic(err)
	}

	// Reading the written values
	var num float64
	if err := binary.Read(buf, binary.BigEndian, &num);
		err != nil {
		panic(err)
	}
	fmt.Printf("float64: %.3f\n", num)
	greeting := make([]byte, 5)
	if err := binary.Read(buf, binary.BigEndian, &greeting);
		err != nil {
		panic(err)
	}
	fmt.Printf("string: %s\n", string(greeting))
}
$ go run main.go
float64: 1.004
string: Hello

原理

可以使用encoding/binary包写入二进制数据。 Write函数使用Writer写入数据的位置,字节顺序(BigEndian/LittleEndian),最后写入要写入Writer的值。

为了模拟读取二进制数据,可以使用read函数。注意,从二进制源读取数据并没有什么神奇之处。你需要确定从Reader中获取的是什么数据。如果没有,则可以将数据获取到适合该大小的任何类型。