阅读背景:

gob,protobuf,json在golang中的序列化效率对比

来源:互联网 

先上代码:

looptimes:=10000
	u:=User{66,"nxin","beijing"}
	gobbegintimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
	gobbeginint,_:=strconv.Atoi(gobbegintimestamp)
	fmt.Println("gob序列化==============================",gobbeginint)
	buf := new(bytes.Buffer)   //分配内存
	enc := gob.NewEncoder(buf) //创建基于buf内存的编码器
	for i:=0;i<looptimes;i++ {

		err := enc.Encode(u)       //编码器对结构体编码
		if err != nil {
			log.Fatal(err)
		}
	}
	gobendtimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
	gobendint,_:=strconv.Atoi(gobendtimestamp)
	fmt.Println("===================END===================",gobendint)

	jsonbegintimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
	jsonbeginint,_:=strconv.Atoi(jsonbegintimestamp)
	fmt.Println("json序列化==============================", jsonbeginint)
	for j:=0;j<looptimes;j++ {
		_, e := json.Marshal(u)
		if e!=nil{
			log.Fatal(e)
		}
	}
	jsonendtimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
	jsonendint,_:=strconv.Atoi(jsonendtimestamp)
	fmt.Println("===================END===================",jsonendint)


	protobufbegintimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
	protobufbeginint,_:=strconv.Atoi(protobufbegintimestamp)
	fmt.Println("protobuf序列化==============================", protobufbeginint)
	hw:=&model.Helloworld{10,"wang","beijing"}
	for j:=0;j<looptimes;j++ {
		_, e := proto.Marshal(hw)
		if e!=nil{
			log.Fatal(e)
		}
	}
	protobufendtimestamp:=strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
	protobufendint,_:=strconv.Atoi(protobufendtimestamp)
	fmt.Println("===================END===================",protobufendint)


	fmt.Println("json:",jsonendint-jsonbeginint)
	fmt.Println("gob:",gobendint-gobbeginint)
	fmt.Println("protobuf:",protobufendint-protobufbeginint)looptimes:=10000
	u:=User{66,"nxin","be



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: