【问题标题】:Read arbitrary amount of bytes into buffer Golang将任意数量的字节读入缓冲区 Golang
【发布时间】:2014-07-18 04:58:34
【问题描述】:

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

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

【问题讨论】:

  • 我不明白。什么是“优雅归来”? Handle 函数是否只占用 256 个长度字节?
  • 您没有正确处理EOF - 请参阅io.Reader 文档 - 可以使用n != 0 返回EOF。不确定这是否是您的问题!

标签: go


【解决方案1】:

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

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

   Handle(b.Bytes())

【讨论】:

    猜你喜欢
    • 2017-09-29
    • 2012-11-19
    • 2019-03-12
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2018-10-02
    相关资源
    最近更新 更多