将Hijack()与http.ResponseWriter
实例
Hijack()(net.Conn,* bufio.ReadWriter,错误)
阅读net.Conn
和*bufio.ReadWriter
?
答案 0 :(得分:4)
net.Conn.Read
和*bufio.ReadWriter.Read
都从同一个连接读取,但后者是缓冲的。标准“net / http”包中的Hijack
方法使用已为http请求分配的net.Conn
直接返回bufio.ReadWriter
中包含的*bufio.Reader
。
有可能在bufio.Reader
中仍然存在缓冲数据,直接从网络连接中读取时可能会错过这些数据。如果要直接使用net.Conn
,则应检查是否已存在Reader.Buffered
的缓冲数据,并根据所使用的协议进行处理。
通常,您应该更喜欢使用bufio.ReadWriter
,因为对于非最佳大小的读写网络来说,它会更有效。
仍然需要net.Conn
来处理读取和写入期限,在完成时关闭net.Conn
以及任何其他特定于网络的活动。
答案 1 :(得分:-1)
他们的差异是缓冲IO。
net.Conn实现了Read()和Write(),从而实现了io.Reader和io.Writer。这就是为什么bufio可以将它作为缓冲的 ReadWriter包装起来,并以缓冲的方式使用这两种方法进一步实现函数。
如果你只想使用Read()和Write(),你可以坚持使用net.Conn,否则你可以利用缓冲的ReadWriter方法。
请参阅https://golang.org/pkg/io/#Reader和https://golang.org/pkg/io/#Writer