go - 序列化结构字段以预先存在 byte slice

标签 go serialization

我有一个设置,可以通过网络接收数据并将其序列化到我的结构中。它工作正常,但现在我需要将数据序列化到 slice 缓冲区以通过网络发送它。

我试图避免分配超过需要的空间,所以我已经设置了一个缓冲区,我想为我的所有序列化写入该缓冲区。但我不确定该怎么做。

我的设置是这样的:

recieveBuffer := make([]byte, 1500)
header := recieveBuffer[0:1]
message := recieveBuffer[1:]

因此,我尝试将结构中的字段写入message,并将所有字段的总字节数作为header 的值。

这就是我反序列化结构的方式:

// Deserialize ...
func (userSession *UserSession) Deserialize(message []byte) {
    userSession.UID = int64(binary.LittleEndian.Uint32(message[0:4]))
    userSession.UUID = string(message[4:40])
    userSession.Username = string(message[40:])
}

然而,我真的不知道如何做相反的事情。是否可以在复制到 message 之前不为每个要序列化的字段创建缓冲区?

最佳答案

给定预分配缓冲区 buf,您可以像这样反转过程:

buf[0] = byte(40+len(userSession.Username))
binary.LittleEndian.PutUint32(buf[1:], uint32(int32(userSession.UID)))
copy(buf[5:41], userSession.UUID)
copy(buf[41:], userSession.Username)

关于go - 序列化结构字段以预先存在 byte slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47881732/

相关文章:

c# - 如何使用 OnSerializing 和 OnDeserializing 属性?

pointers - 使用值接收器 append 到具有足够容量的 slice

string - 如何获取字符的 Unicode 值?

java - SerialVersionUid 可以是任意数字还是必须由编译器生成?

json - 如何反序列化并转换为 Long 所有数字?

jQuery序列化将所有空格转换为加号

arrays - 在 Go 中克隆 float slice 而不影响原始

go - golang中的关机信号

Golang 对 VSTS Git 的支持

Java:通用序列化方法