我正在尝试读取带符号的 16 位整数(wav 格式)的缓冲流,但 bufio.Read 方法只接受一个字节数组。我的问题是一个两部分:

  1. 我可以将字节流预先格式化为缓冲的 int16 数组吗?

  2. 如果我不能,将字节数组后处理为 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)

        }

    }

}