Awn*_*Awn 5 linux buffer stdin go
你如何从 Golang 的 stdin 中读取大量数据?我所有的读取当前都在 4095 字节处停止。我已经尝试了很多东西,但我当前的代码看起来像:
var stdinReader = bufio.NewReader(os.stdin)
// Input reads from stdin while echoing back.
func Input(prompt string) []byte {
var data []byte
// Output prompt.
fmt.Print(prompt)
// Read until newline.
for {
bytes, isPrefix, _ := stdinReader.ReadLine()
data = append(data, bytes...)
if !isPrefix {
break
}
}
// Everything went well. Return the data.
return data
}
Run Code Online (Sandbox Code Playgroud)
我也试过使用扫描仪,但不知道如何退出
for scanner.Scan() {
data = append(data, scanner.Bytes()...)
}
Run Code Online (Sandbox Code Playgroud)
当换行发生时(即当用户按下回车键时)。
我也试过 ReadBytes('\n') 但即使是在 4095 字节处停止。除了增加缓冲区的大小(这只是一个丑陋的黑客),我不知道此时该怎么做。
如果您查看 Go 源代码,您会发现它使用默认缓冲区大小:
func NewReader(rd io.Reader) *Reader {
return NewReaderSize(rd, defaultBufSize)
}
Run Code Online (Sandbox Code Playgroud)
所以你可以在你的代码中使用:
var stdinReader = bufio.NewReaderSize(os.Stdin, 10000)
Run Code Online (Sandbox Code Playgroud)
PS Go 是开源的,因此您只需查看内部结构就可以学到很多东西。