Голанг - Угон Аргументы
При использовании Hijack() с http.ResponseWriter
пример
Hijack() (net.Conn, *bufio.ReadWriter, ошибка)
В чем разница между чтением из net.Conn
и *bufio.ReadWriter
?
2 ответа
net.Conn.Read
а также *bufio.ReadWriter.Read
оба читаются с одного и того же соединения, но последнее буферизируется. Hijack
метод в стандартном пакете "net/http" напрямую возвращает net.Conn
завернутый в 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/ и https://golang.org/pkg/io/.