我正在使用 flatbuffer 通过 unix 套接字发送二进制数据。我发送的 flatbuffer 是动态长度的。我面临的问题是,如何知道我必须为一张表读取多少字节。
发送时是否可以附加分隔符之类的东西,我可以用它来确定平面缓冲区的结尾。
当我尝试使用较小的尺寸时
buf := make([]byte, 512)
nr, err := c.Read(buf)
if err != nil {
fmt.Println("exit echo")
return
}
如果读取大于 512 字节的 flatbuffer,则会导致失败。
当我通过增加缓冲区来阅读时,我无法找到阅读的结尾
var n, nr int
var err error
buf := make([]byte, 0, 4096) // big buffer
tmp := make([]byte, 512)
for {
n, err = c.Read(tmp)
if err != nil {
break
}
nr += n
if nr >= 4096 {
err = errOverrun
break
}
buf = append(buf, tmp[:n]...)
}
if err != nil {
fmt.Println("read error:", err)
break
}