将Hijack()与http.ResponseWriter
实例一起使用时
Hijack() (net.Conn, *bufio.ReadWriter, 错误)
net.Conn
从 the和 the读取有什么区别*bufio.ReadWriter
?
net.Conn.Read
并且*bufio.ReadWriter.Read
都从同一个连接读取,但后者是缓冲的。Hijack
标准“net/http”包中的方法直接返回net.Conn
包装在 a 中bufio.ReadWriter
,使用*bufio.Reader
已经为 http 请求分配的相同。
bufio.Reader
当直接从网络连接读取时,可能仍然有缓冲的数据。如果你想net.Conn
直接使用,你应该检查是否已经有缓冲数据Reader.Buffered
,并根据正在使用的协议进行处理。
通常,您应该更喜欢使用bufio.ReadWriter
,因为它对于非最佳大小的网络读取和写入会更有效。
net.Conn
仍然需要处理读取和写入截止日期、完成时关闭以及 net.Conn
任何其他特定于网络的活动。
它们的区别在于缓冲 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