Я пытаюсь читать буферизованный поток подписанных 16-битных целых чисел (wav-формат), но метод bufio.Read принимает только массив байтов. Мой вопрос: 2-партер:Golang: Чтение буферизованного ввода как подписанного 16-битного ints
- Могу ли я предварительно форматировать поток байтов в буферизованный массив int16?
Если я не могу, то лучший способ постображения массива байтов в массив int16? Моя первоначальная мысль состоит в том, чтобы использовать массивы tmp и продолжать толкать/обрабатывать их, но мне было любопытно, есть ли более идиоматический способ сделать это?
package main import ( "bufio" "io" "log" "os/exec" ) func main() { app := "someapp" cmd := exec.Command(app) stdout, err := cmd.StdoutPipe() r := bufio.NewReader(stdout) if err != nil { log.Fatal(err) } if err := cmd.Start(); err != nil { log.Fatal(err) } //"someapp" outputs signed 16bit integers (little endian)) buf := make([]byte, 0, 4*1024) for { n, err := r.Read(buf[:cap(buf)]) //r.Read only accepts type []byte buf = buf[:n] if n == 0 { if err == nil { continue } if err == io.EOF { break } log.Fatal(err) } log.Printf("%x\n", buf) //process buf here if err != nil && err != io.EOF { log.Fatal(err) } } }
Несвязанного к проблеме под руку, но ваш код не соответствует семантике [ 'io.Reader'] (https://golang.org/pkg/io/# Читатель). (Оказывается, реализация ['bufio.Buffer''s] (https://golang.org/pkg/bufio/#Reader.Read) документирована как более строгая, но в целом лучше всего предположить любое' io. Reader'). –