私はフラットバッファを使用して、バイナリデータをUnixソケット経由で送信しています。私が送るflatbufferは動的な長さです。私が直面している問題は、1つのテーブルに対して何バイト読みなければならないかを知る方法です。ダイナミックFlatBuffersデリミタ
送信中に追加できる区切り記号のようなものがありますが、これを使ってフラットバッファの終わりを判断できます。私は小さいサイズ
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
}