美文网首页
encoding/gob

encoding/gob

作者: 酷走天涯 | 来源:发表于2018-12-25 09:25 被阅读16次

import "encoding/gob"

gob包管理gob流——在编码器(发送器)和解码器(接受器)之间交换的binary值。一般用于传递远端程序调用(RPC)的参数和结果,如net/rpc包就有提供。

本实现给每一个数据类型都编译生成一个编解码程序,当单个编码器用于传递数据流时,会分期偿还编译的消耗,是效率最高的。

基本特点

1.gob流是自解码的
2.流中的所有数据都有前缀(采用一个预定义类型的集合)指明其类型.
3.指针不会传递,而是传递值
4.递归的类型可以很好的工作,但是递归的值(比如说值内某个成员直接/间接指向该值)会出问题。

go编解码过程

1.先要创建一个编码器
2.并向其一共一系列数据:可以是值,也可以是指向实际存在数据的指针。
3.编码器会确保所有必要的类型信息都被发送。
4.在接收端,解码器从编码数据流中恢复数据并将它们填写进本地变量里

下面写一个小实例演示一下过程

package main

import (
    "bytes"
    "encoding/gob"
    "log"
    "fmt"
)

type User struct {
    Name string
}

func main() {
   var network bytes.Buffer
   // 1.创建编码器
   enc := gob.NewEncoder(&network)
   // 2.向编码器中写入数据
    err := enc.Encode(User{Name:"酷走天涯"})
    if err != nil {
       log.Fatal(err)
    }
    
   // 3.创建解码器
   dec := gob.NewDecoder(&network)
   var user User
   // 4.解码
   dec.Decode(&user)
   fmt.Println(user.Name)
}
image.png

我们创建了一个编码器,将数据写入流中,然后创建了一个解码器,将数据流解码到user变量中

我们下面自定义编码的编解码过程

package main

import (
    "bytes"
    "encoding/gob"
    "log"
    "fmt"
)

type User struct {
    Name string
}

// 编码过程
func (v User) MarshalBinary() ([]byte, error) {
    var b bytes.Buffer
    fmt.Fprintln(&b, v.Name)
    return b.Bytes(), nil
}
// 自定义解码过程
func (v *User) UnmarshalBinary(data []byte) error {
    // A simple encoding: plain text.
    b := bytes.NewBuffer(data)
    _, err := fmt.Fscanln(b, &v.Name)
    return err
}

func main() {
   var network bytes.Buffer
   // 1.创建编码器
   enc := gob.NewEncoder(&network)
   // 2.向编码器中写入数据
    err := enc.Encode(User{Name:"酷走天涯"})
    if err != nil {
       log.Fatal(err)
    }

   // 3.创建解码器
   dec := gob.NewDecoder(&network)
   var user User
   // 4.解码
   dec.Decode(&user)
   fmt.Println(user)
}
image.png

让对象实现方法 UnmarshalBinary(data []byte) errorMarshalBinary() ([]byte, error)即可实现重写编码过程

相关文章

  • encoding/gob

    import "encoding/gob" gob包管理gob流——在编码器(发送器)和解码器(接受器)之间交换的...

  • golang 读写二进制文件(2)

    golang 使用encoding/gob包读写二进制文件 上篇介绍了使用"encoding/binary"包读写...

  • Go net/rpc

    Golang官方提供的net/rpc库使用encoding/gob进行编解码,支持TCP或HTTP数据传输方式,由...

  • golang标准库中的encoding/gob包

    一、golang中的gob包是什么? gob是golang包自带的一个数据结构序列化的编码/解码工具。 二、go标...

  • golang标准库中的encoding/gob包

    1、golang中的gob包是什么?2、go标准库中的gob编码规则3、gob包给开发者提供了什么内容?以及怎么使...

  • Go gob

    为了让数据结构能够在网络中传输或保存到文件,它必须被编码后再解码。目前有多种可用的编码方式,比如JSON、XML、...

  • Golang Gob编码

    欢迎大家一起交流学习,Q:281286620 gob是Golang包自带的一个数据结构序列化的编码/解码工具。编码...

  • URI Encoding

    What is URL Encoding URL Encoding 也被成为 percent encoding,U...

  • Encoding

    1. 字符发展历史 1.1 字节 计算机内部,所有信息最终都是一个二进制值 每一个二进制位(bit)有0和1两种状...

  • Encoding

    到目前为止,还没有讨论字符串是如何存储的。 字符串由Unicode代码点集合组成。这些代码点的范围从0到11141...

网友评论

      本文标题:encoding/gob

      本文链接:https://www.haomeiwen.com/subject/gdmloftx.html