将劫持()与http.ResponseWriter实例一起使用时
Hijack() (net.Conn,*bufio.ReadWriter,error)
net.Conn和*bufio.ReadWriter的阅读有什么区别?
发布于 2016-02-22 20:40:52
net.Conn.Read和*bufio.ReadWriter.Read都是从同一个连接读取的,但后者是缓冲的。标准"net/ http“包中的Hijack方法直接返回包装在bufio.ReadWriter中的net.Conn,使用已经分配给http请求的相同的*bufio.Reader。
在直接从网络连接读取数据时,bufio.Reader中可能仍有缓冲的数据,这是可能的。如果您想直接使用net.Conn,您应该检查是否已经有Reader.Buffered中的缓冲数据,并根据正在使用的协议来处理。
通常,您应该更喜欢使用bufio.ReadWriter,因为它将更有效地处理非优化大小的读写网络。
net.Conn仍然需要处理读写截止日期、在完成时关闭net.Conn以及任何其他特定于网络的活动。
发布于 2016-02-22 20:15:09
他们的区别是缓冲IO。
net.Conn实现了读()和写(),从而实现了io.Reader和io.Writer。这就是为什么bufio可以将其封装为一个缓冲的ReadWriter,并在顶部以缓冲的方式使用这两种方法进一步实现函数。
如果您只想使用Read()和Write(),可以只使用net.Conn,否则就可以利用缓冲的ReadWriter方法。
见https://golang.org/pkg/io/#Reader和https://golang.org/pkg/io/#Writer
https://stackoverflow.com/questions/35562820
复制相似问题