4

インスタンスでHijack()を使用するhttp.ResponseWriter場合

Hijack() (net.Conn, *bufio.ReadWriter, エラー)

net.Connから読むとから読む の違いは何*bufio.ReadWriterですか?

4

2 に答える 2

5

net.Conn.Readどちらも*bufio.ReadWriter.Read同じ接続から読み取りますが、後者はバッファリングされます。Hijack標準の「net/http」パッケージのメソッドは、http 要求にすでに割り当てられているものを使用して、net.Connラップされた を直接返します。bufio.ReadWriter*bufio.Reader

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 としてラップし、これら 2 つのメソッドをバッファリングされた方法で使用して、その上に関数をさらに実装できる理由です。

Read() と Write() のみを使用したい場合は、net.Conn をそのまま使用できます。それ以外の場合は、バッファリングされた ReadWriter メソッドを利用できます。

https://golang.org/pkg/io/#Readerおよびhttps://golang.org/pkg/io/#Writerを参照してください

于 2016-02-22T20:15:09.683 に答える