I have a program that sends udp packets. a packet datagram is represented by the following struct (notice that the size of the packet isn't fixed):
type packet struct {
dataLength uint16
id [8]byte
pairity, shards, flags byte
blob []byte // length defined by dataLength
}
I used encoding/binary package to do serialization/deserialization but it wasn't efficient enough (used pprof). it wasted alot of CPU time and I couldn't utilize the whole network speed because of that.
for example, consider the following code:
packet := packet{
dataLength: 4,
id: [8]byte{1,2,3,4,5,6,7,8},
pairity: 10,
shards: 50,
flags: 200,
blob: []byte{1,2,3,4},
}
bufToSendOverNetwork := packet.ToBytes()
What is the most efficient way to do this operation (and also the .FromBytes
operation)