区块链V3版本实现之三
部分代码(block.go文件中添加序列化与反序列化):
1 //序列化,将区块转换为字节流 2 func (block *Block) Serialize() []byte { 3 4 var buffer bytes.Buffer 5 6 //定义编码器 7 encoder := gob.NewEncoder(&buffer) 8 9 //编码器对结构进行编码,一定要进行校验 10 err := encoder.Encode(block) 11 if err != nil { 12 log.Panic(err) 13 } 14 return buffer.Bytes() 15 } 16 17 //反序列化,将字节流转换为区块 18 func Deserialize(data []byte) *Block { 19 20 fmt.Print("解码传入的数据:%x\n",data) 21 22 var block Block 23 //创建解码器 24 decoder := gob.NewDecoder(bytes.NewReader(data)) 25 err := decoder.Decode(&block) 26 27 if err != nil { 28 log.Panic(err) 29 } 30 return &block 31 }
部分代码(blockchain.go文件中在添加创世块后添加输出测试代码):
1 //添加创世块 2 genesisBlock := NewBlock(genesisInfo, []byte{}) 3 b.Put(genesisBlock.Hash,genesisBlock.Serialize()/*将区块序列化,转成字节流*/) 4 b.Put([]byte("lastHashKey"),genesisBlock.Hash) 5 6 ////区块数据读取,测试写入是否成功,成功就稍后注释 7 //blockInfo := b.Get(genesisBlock.Hash) 8 //block := Deserialize(blockInfo) 9 //fmt.Printf("解码后的block数据:%v\n",block)
显示效果:(注释main.go的输出)