4

Hijack()http.ResponseWriter实例一起使用时

Hijack() (net.Conn, *bufio.ReadWriter, 错误)

net.Conn从 the和 the读取有什么区别*bufio.ReadWriter

4

2 回答 2

5

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任何其他特定于网络的活动。

于 2016-02-22T20:40:52.300 回答
-1

它们的区别在于缓冲 IO。

net.Conn 实现 Read() 和 Write() 从而实现 io.Reader 和 io.Writer。这就是为什么 bufio 可以将其包装为缓冲的ReadWriter 并以缓冲的方式使用这两种方法进一步实现功能。

如果你只想使用 Read() 和 Write(),你可以坚持使用 net.Conn,否则你可以利用缓冲的 ReadWriter 方法。

https://golang.org/pkg/io/#Readerhttps://golang.org/pkg/io/#Writer

于 2016-02-22T20:15:09.683 回答