将任意数量的字节读入缓冲区 Golang

6
我正在尝试从连接中读取一系列信息。我没有编写服务器部分,也无法修改协议(否则我会让协议更友好)。
我正在尝试在Go中编写一个服务,将任意数量的字节循环读入缓冲区并将其传递给另一个处理程序(我也无法修改此部分)。
这是我的当前设置。
buf := make([]byte, 256)
for {
    n, err := conn.Read(buf)
    fmt.Println(string(buf))
    if err != nil || n== 0 {
        return
    }
    Handle(buf[:n])
}

当有足够的字节可读时,这个方法可以正常运行... 但是,在流结束时,可能没有256个可读字节。是否有任何方法可以在Read()时保留我的256字节缓冲区,以便优雅地返回?


我不明白,“gracefully return”是什么意思?Handle函数只接受256长度的字节吗? - chendesheng
2
你没有正确处理 EOF - 请参考 io.Reader 文档 - 当 n != 0 时,可能会返回 EOF。不确定这是否是你的问题! - Nick Craig-Wood
1个回答

8

如果您希望读取连接的整个数据流,您可以使用:

   var b bytes.Buffer
   if _, err:= io.Copy(&b, conn); err != nil {
      return err
   }

   Handle(b.Bytes())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接