Golangのstdinから大量のデータをどのように読み込みますか?私のすべての読書は現在4095バイトで止まります。 (改行が発生したとき、私はまた、スキャナを使用してみましたが、標準入力から大量のデータを読み取る
for scanner.Scan() {
data = append(data, scanner.Bytes()...)
}
を終了する方法を見つけ出すことができませんでした
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
}
:私は物事の多くを試してみたが、私の現在のコードは次のようになりますすなわちユーザがリターンを押したとき)。
ReadBytes( '\ n')でも試しましたが、それでも4095バイトで停止しました。バッファのサイズを増やすことのほんの少し(これはちょっと醜いハックです)私はこの時点で何をすべきか分かりません。
> 4095バイトを読み込む方法の問題に対処する前に、達成しようとしている目標は何ですか?大量のデータをバイト配列にスラーピングすることは、通常は悪い考えです。ほとんどの使用例では、パフォーマンスを向上させ、メモリ消費を抑えるために、ストリームで操作する必要があります。 – Flimzy
@Flimzyそれは良い点です。それを念頭に置いておきます。私は後で入力のためにファイルを使用することを計画しているので、それはチャンク(すなわちストリーム)になります。私はstdinから4095バイト以上を読み込む慣用的な方法があるかどうか疑問に思っています。 – Awn
なぜ[ReadLine](https://golang.org/pkg/bufio/#Reader.ReadLine)を使用していますか? 'stdin'に' \ n'がなければ、isPrefixが壊れてしまいますので、停止します。 'Read()'の使い方は?それは事前に知られていないので、読む@apxp – apxp