Чтение байтов в буфере Голанга с фиксированным размером шага - PullRequest
0 голосов
/ 08 октября 2018

Я хотел бы прочитать и обработать 1024 байта за раз в моем файле, заданном именем файла.Я не понимаю, как правильно построить внешний цикл, особенно для размещения последнего шага, в котором буфер будет содержать менее 1024 байтов

Что я пробовал:

fs, _ := os.Open(filename)
defer fs.Close()
n := 1024 // 1kb
buff := make([]byte, n)
for {
    buff = make([]byte, n) // is this initialized correctly?
    n1, err := fs.Read(buff)
    if err != nil {
        if err == io.EOF {
            break
        }
        fmt.Println(err)
        break
    }
    fmt.Println("read n1 bytes...", n1)
    fmt.Println("%v", buff)
  }

Этовыдал следующие ошибки:

  • 'бафф объявлен и не используется', что для меня не имеет смысла, так как оно совершенно очевидно
  • 'n1 объявлено и не использовано'
  • «неверный аргумент»

Я видел следующие ресурсы:

1 Ответ

0 голосов
/ 08 октября 2018

Я хотел бы прочитать и обработать 1024 байта за раз в моем файле, заданном именем файла.

Я ожидал бы увидеть что-то вроде этого:

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
)

func main() {
    filename := `test.file`
    f, err := os.Open(filename)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()
    r := bufio.NewReader(f)
    buf := make([]byte, 0, 1024)
    for {
        n, err := io.ReadFull(r, buf[:cap(buf)])
        buf = buf[:n]
        if err != nil {
            if err == io.EOF {
                break
            }
            if err != io.ErrUnexpectedEOF {
                fmt.Println(err)
                break
            }
        }
        fmt.Println("read n bytes...", n)
        // process buf
    }
}

Вывод:

read n bytes... 1024
read n bytes... 1024
read n bytes... 1024
read n bytes... 80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...