РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
579 of 1593 menu

Функция io.ReadAtLeast

Функция io.ReadAtLeast читает данные из переданного ей ридера и заполняет переданный срез байт, пытаясь прочитать как минимум указанное минимальное количество байт. Первым параметром функция принимает ридер (объект, реализующий интерфейс io.Reader), вторым — срез байт для чтения данных, третьим — минимальное количество байт, которое необходимо прочитать. Функция возвращает два значения: количество фактически прочитанных байт и ошибку. Если ридер вернул ошибку до того, как было прочитано минимальное количество байт, функция возвращает ошибку io.ErrUnexpectedEOF. Если ридер вернул ошибку io.EOF до достижения минимального порога, возвращается io.ErrUnexpectedEOF, а не io.EOF.

Синтаксис

func ReadAtLeast(r io.Reader, buf []byte, min int) (n int, err error)

Пример

Давайте прочитаем из строкового ридера не менее 5 байт:

package main import ( "fmt" "io" "strings" ) func main() { r := strings.NewReader("1234567890") buf := make([]byte, 10) n, err := io.ReadAtLeast(r, buf, 5) if err != nil { fmt.Println("Error:", err) return } res := string(buf[:n]) fmt.Println(res) }

Результат выполнения кода:

"12345"

Пример

Попробуем прочитать из ридера не менее 15 байт, но в ридере всего 10 байт:

package main import ( "fmt" "io" "strings" ) func main() { r := strings.NewReader("1234567890") buf := make([]byte, 20) n, err := io.ReadAtLeast(r, buf, 15) if err != nil { fmt.Println("Error:", err) fmt.Println("Read bytes:", n) return } res := string(buf[:n]) fmt.Println(res) }

Результат выполнения кода:

"Error: unexpected EOF" "Read bytes: 10"

Пример

Прочитаем ровно столько байт, сколько есть в ридере, используя переданный буфер:

package main import ( "fmt" "io" "strings" ) func main() { r := strings.NewReader("abcde") buf := make([]byte, 10) n, err := io.ReadAtLeast(r, buf, 5) if err != nil { fmt.Println("Error:", err) return } res := string(buf[:n]) fmt.Println(res) }

Результат выполнения кода:

"abcde"

Смотрите также

  • функцию io.ReadAll,
    которая читает все данные из ридера до EOF
  • функцию io.ReadFull,
    которая читает ровно указанное количество байт
  • функцию io.Copy,
    которая копирует данные из ридера в писатель
  • функцию io.LimitReader,
    которая ограничивает чтение до указанного количества байт
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить