Go проверить, пуст ли читатель bufio - PullRequest
0 голосов
/ 22 апреля 2020
var r bufio.Reader

Как проверить, не содержит ли r больше данных (пусто, исчерпано)?

Я понимаю, что это может потребоваться для блокировки, пока эта информация не станет известной.

Ничего не могу найти в поиске Google. Я думал, что функция Peek будет полезна, чтобы увидеть, есть ли больше данных, но это, кажется, только просматривает основной буфер, если существует. Я также мог бы попытаться Read один байт и затем вызвать UnreadByte, но это очень грязно и неясно, есть ли лучшие варианты?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Если r.Peek(1) возвращает данные, то следующий вызов Read вернет данные.

Если в буфере нет данных, то Peek вызывает базовый считыватель и будет блокировать до тех пор, пока данные не станут доступны или возникнет ошибка.

1 голос
/ 22 апреля 2020

Если я правильно понимаю ваш вопрос, сработает ли это?

// func (*Reader) Size() int
// Size returns the size of the underlying buffer in bytes.
size := r.Size()

// func (*Reader) Buffered() int
// Buffered returns the number of bytes that can be read from the current buffer
buffered := r.Buffered()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...