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

dre*_*ool 6 go

我正在尝试从连接读取信息流。我还没有编写其中的服务器部分,并且无权修改协议(否则我会让协议变得更加友好)

我正在尝试在 Go 中编写一个服务,该服务在循环中将任意数量的字节读取到缓冲区中,并将其传递给另一个处理程序(我也无法修改这部分)

这是我当前的设置

buf := make([]byte, 256)
for {
    n, err := conn.Read(buf)
    fmt.Println(string(buf))
    if err != nil || n== 0 {
        return
    }
    Handle(buf[:n])
}
Run Code Online (Sandbox Code Playgroud)

当有足够的字节可供读取时,此方法工作正常...但是,在流的末尾,没有 256 个字节可读。有没有办法在 Read() 优雅地返回时保留我的 256 字节缓冲区?

fab*_*ioM 9

如果你想读取连接的整个流,你可以使用:

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

   Handle(b.Bytes())
Run Code Online (Sandbox Code Playgroud)