[英]Buffering with Scanner upon System.in in Java
我在Java中使用掃描儀時遇到問題。 我有一個解析System.in
並基於此數據創建對象的方法。 但是,如果我在方法內部創建Scanner
,則有2種方法可以做到這一點,即關閉和不關閉。 在第一種情況下, Scanner.close()
關閉System.in
,否則它將預先緩沖,並且其緩沖的字符將無法從另一個Scanner訪問。 因此,現在我將Scanner
實例傳遞給方法。 但是,如果您需要從控制台讀取另一個對象(例如,通過BufferedReader
則可能並不可靠。 另外,這似乎不是一個真正干凈的設計解決方案。
我猜想該設計考慮到一次只能Reader
一個Reader
或Scanner
實際上一次讀取InputStream
( System.in
),因此在上面具有多個Reader
是沒有用的(因為它也會消耗流),因此使其可行關閉基礎InputStream
。
編輯:一種解決方案是直接使用InputStream
( read()
)並自行處理字節讀取。 例如, String
具有構造函數String(byte[])
,您可以將其與substring()
一起使用,以僅返回未使用的部分。
定義一個BufferedReader
並將其傳遞給您的方法。 使用它可以將行讀入字符串中,並在其上附加一個Scanner
而不是System.in
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.