读取 net.Conn 缓冲区的第一个 UVarInt
Reading the first UVarInt of a net.Conn buffer
我通过侦听端口设置了 TCP 数据包连接 (net.Conn
)。
conn, err := ln.Accept()
我需要读取 Conn.Read([]byte)
缓冲区的第一个 UVarInt,它从索引 0 开始。
以前,我只需要第一个字节,这很容易使用
packetSize := make([]byte, 1)
conn.Read(packetSize)
// Do stuff with packetSize[0]
但是,如前所述,我需要使用 net.Conn.Read() 方法获取我可以到达的第一个 UVarInt。请记住,UVarInt 几乎可以有任何长度,我不能确定这一点(客户端不发送 UVarInt 的大小)。但是我知道 UVarInt 从缓冲区的最开始开始。
用bufio.Reader包装连接:
br := bufio.NewReader(conn)
使用二进制包read an unsigned varint通过bufio.Reader:
n, err := binary. ReadUvarInt(br)
因为 bufio.Reader 比 varint 可以缓冲更多,所以您应该对连接上的所有后续读取使用 bufio.Reader。
我通过侦听端口设置了 TCP 数据包连接 (net.Conn
)。
conn, err := ln.Accept()
我需要读取 Conn.Read([]byte)
缓冲区的第一个 UVarInt,它从索引 0 开始。
以前,我只需要第一个字节,这很容易使用
packetSize := make([]byte, 1)
conn.Read(packetSize)
// Do stuff with packetSize[0]
但是,如前所述,我需要使用 net.Conn.Read() 方法获取我可以到达的第一个 UVarInt。请记住,UVarInt 几乎可以有任何长度,我不能确定这一点(客户端不发送 UVarInt 的大小)。但是我知道 UVarInt 从缓冲区的最开始开始。
用bufio.Reader包装连接:
br := bufio.NewReader(conn)
使用二进制包read an unsigned varint通过bufio.Reader:
n, err := binary. ReadUvarInt(br)
因为 bufio.Reader 比 varint 可以缓冲更多,所以您应该对连接上的所有后续读取使用 bufio.Reader。