我正在尝试通过大猩猩/ websocket发送图像数据的字节,我当前的代码是:
var b bytes.Buffer
empty := bufio.NewWriter(&b)
png.Encode(empty, img)
err = c.WriteMessage(websocket.TextMessage, b.Bytes())
我的用于接收消息的代码:
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
// log.Printf("recv: %s", message)
ioutil.WriteFile("./nani.png", []byte(message), 0644)
然后保存的文件已损坏,我该如何以二进制/字节的形式写入/读取消息
答案 0 :(得分:1)
必须刷新bufio.Writer才能将任何缓冲的数据写入基础写入器(在这种情况下为bytes.Buffer)。如果未刷新bufio.Writer,则某些图像数据可能会丢失,并且图像似乎已损坏。
有关刷新记录器的更多信息,请参见bufio.Writer documentation。
解决方法是
var b bytes.Buffer
empty := bufio.NewWriter(&b)
png.Encode(empty, img)
empty.Flush() // <-- add this call
因为写入字节时不需要缓冲数据。因此,可以通过消除bufio.Writer来改进代码:
var b bytes.Buffer
png.Encode(&b, img)
使用websocket.BinaryMessage发送二进制消息。有关消息类型的更多信息,请参见文档的Data Message部分。