簡體   English   中英

使用Java中的System.in在Scanner上進行緩沖

[英]Buffering with Scanner upon System.in in Java

我在Java中使用掃描儀時遇到問題。 我有一個解析System.in並基於此數據創建對象的方法。 但是,如果我在方法內部創建Scanner ,則有2種方法可以做到這一點,即關閉和不關閉。 在第一種情況下, Scanner.close()關閉System.in ,否則它將預先緩沖,並且其緩沖的字符將無法從另一個Scanner訪問。 因此,現在我將Scanner實例傳遞給方法。 但是,如果您需要從控制台讀取另一個對象(例如,通過BufferedReader則可能並不可靠。 另外,這似乎不是一個真正干凈的設計解決方案。

我猜想該設計考慮到一次只能Reader一個ReaderScanner實際上一次讀取InputStreamSystem.in ),因此在上面具有多個Reader是沒有用的(因為它也會消耗流),因此使其可行關閉基礎InputStream

編輯:一種解決方案是直接使用InputStreamread() )並自行處理字節讀取。 例如, String具有構造函數String(byte[]) ,您可以將其與substring()一起使用,以僅返回未使用的部分。

定義一個BufferedReader並將其傳遞給您的方法。 使用它可以將行讀入字符串中,並在其上附加一個Scanner而不是System.in

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM