Голанг - Угон Аргументы

При использовании 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/.

Другие вопросы по тегам