2016-08-23 156 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有一個錯誤的配置,我已經要求他們找出它。