2016-08-23 154 views
2

我想从os.Stdin中读取长文本,但是我无法实现。已经阅读了主题中的所有内容,尝试了应该工作的代码。无论如何,每种方法都会在4096个字符后切分。golang从标准输入中读取长文本

例如, here是一个工作示例。第一次运行循环后,它会读取前4096个字符,然后等待每个输入的更多处理,直到以EOF结尾(Ctrl + D)。对于fmt.Scan,bufio.NewScanner,bufio ReadLine,ioutil.ReadAll也是如此。如果我将它保存到一个文件并读取它,它会按预期工作。从标准输入,它不。

我在Arch Linux上,32位,Go 1.7,在mate-terminal 1.14中测试,tty 8.25,两者都是一样的东西。同样的事情发生在hackerrank.com页面上,我不知道他们使用的是什么技术。

请帮忙!

编辑:

我输入4096个字符只是一点点。我检查了Amd共享的链接,我得到以下内容:我的输入只包含空格分隔的整数的一行。当我将空格更改为换行符时,它就起作用了。但由于hackerrate上的练习格式使用了长长的空间分隔线,问题仍然存在,并进行了细化。

+0

你输入的文本字节大小是多少?你是一次或长时间输入所有文本吗?并在hackerrank上提供了该问题的链接。请参阅:http://stackoverflow.com/questions/31333353/faster-input-scanning – 2016-08-24 04:22:37

回答

1

我能解决这个感谢伊恩·兰斯·泰勒: https://groups.google.com/forum/#!topic/golang-nuts/ndh-1wdsWYs

所以4096个字符是我的系统通过N_TTY_BUF_SIZE内核参数的极限。同样的事情也适用于猫和Python。

无论如何,在hackerrank.com上,我能够解决Python中的相同练习,所以我猜他们对Go有一个错误的配置,我已经要求他们找出它。