如何從Golang的標準輸入讀取大量數據?我所有的讀取當前停止在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
}
我使用掃描儀也嘗試過,但無法弄清楚如何退出
for scanner.Scan() {
data = append(data, scanner.Bytes()...)
}
換行符發生時(即當用戶按下返回時)。
我也嘗試了ReadBytes('\ n'),但即使是停止在4095字節。沒有增加緩衝區的大小(這只是一個醜陋的黑客攻擊),我不知道該怎麼做。
在解決如何閱讀> 4095字節的問題之前,您試圖實現的目標是什麼?將「大量」數據浸入字節數組通常是一個壞主意。對於大多數用例,您應該在流上操作,以獲得更好的性能和更低的內存消耗。 – Flimzy
@Flimzy這是一個很好的觀點,我會牢記在心。我後來計劃使用文件進行輸入,因此它將以塊(即流)的形式出現。我只是想知道是否有從stdin讀取超過4095字節的習慣方式。 – Awn
爲什麼使用[ReadLine](https://golang.org/pkg/bufio/#Reader.ReadLine)?當'stdin'沒有'\ n'時,它會停下來,因爲你打斷了,當isPrefix。如何使用'Read()'? – apxp