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

标签 go

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

我正在尝试在 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 字节缓冲区?

最佳答案

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

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

   Handle(b.Bytes())

关于go - 将任意数量的字节读入缓冲区 Golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24817494/

相关文章:

在带有指针的函数循环中调用的 Goroutine 会覆盖值吗?

arrays - 使用 for 循环创建 []map[string]interface{} 时出错 -> panic : assignment to entry in nil map

networking - 如何监听L3网络层?

go - 同时读取和写入数组是否安全 Go

json - 在 golang 中解码一个 json 数组

go - 实现与接口(interface)不匹配

go - 如何在gofpdf中使用图片Url

multithreading - 我如何将 worker 返回到 Go 中的 worker 池

go - 没有 SWIG 和第三方库的 Go 中的 OpenCV

go - Go 的 ctag 数据库