インスタンスでHijack()を使用するhttp.ResponseWriter
場合
Hijack() (net.Conn, *bufio.ReadWriter, エラー)
net.Conn
から読むとから読む の違いは何*bufio.ReadWriter
ですか?
インスタンスでHijack()を使用するhttp.ResponseWriter
場合
Hijack() (net.Conn, *bufio.ReadWriter, エラー)
net.Conn
から読むとから読む の違いは何*bufio.ReadWriter
ですか?
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
それらの違いはバッファリングされた 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を参照してください