Binary 从stdin接收二进制数据,发送到Go中的通道

Binary 从stdin接收二进制数据,发送到Go中的通道,binary,go,stdin,channel,Binary,Go,Stdin,Channel,所以我有下面的test Go代码,它被设计成通过stdin从二进制文件中读取数据,并将读取的数据发送到一个通道(在那里它将被进一步处理)。在我这里给出的版本中,它只读取stdin中的前两个值,尽管就显示问题而言,这很好 package main import ( "fmt" "io" "os" ) func input(dc chan []byte) { data := make([]byte, 2) var err error var n i

所以我有下面的test Go代码,它被设计成通过stdin从二进制文件中读取数据,并将读取的数据发送到一个通道(在那里它将被进一步处理)。在我这里给出的版本中,它只读取stdin中的前两个值,尽管就显示问题而言,这很好

package main

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

func input(dc chan []byte) {
    data := make([]byte, 2)
    var err error
    var n int
    for err != io.EOF {
        n, err = os.Stdin.Read(data)
        if n > 0 {
            dc <- data[0:n]
        }
    }
}

func main() {
    dc := make(chan []byte, 1)
    go input(dc)
    fmt.Println(<-dc)
}
主程序包
进口(
“fmt”
“io”
“操作系统”
)
func输入(dc chan[]字节){
数据:=生成([]字节,2)
变量错误
变量n int
对于err!=io.EOF{
n、 err=os.Stdin.Read(数据)
如果n>0{

dc每次读取时都会覆盖缓冲区,并且有一个通道缓冲区,因此每次通道中有空间时都会丢失数据

尝试类似的方法(未经测试,写在平板电脑上,等等):

导入“操作系统”
func输入(dc chan[]字节)错误{
延迟关闭(dc)
为了{
数据:=生成([]字节,2)
n、 错误:=os.Stdin.Read(数据)
如果n>0{

dc每次读取时都会覆盖缓冲区,并且有一个通道缓冲区,因此每次通道中有空间时都会丢失数据

尝试类似的方法(未经测试,写在平板电脑上,等等):

导入“操作系统”
func输入(dc chan[]字节)错误{
延迟关闭(dc)
为了{
数据:=生成([]字节,2)
n、 错误:=os.Stdin.Read(数据)
如果n>0{
直流电
./inputtest < data.bin
./inputtest < data.bin
[36 181]
./inputtest < data.bin
[72 218]