特定問題需要量身定制的解決方案。本題旨在建構一個方法,在給定的時間限制內從 InputStream 中檢索數據,如果超過則優雅地失敗並顯示錯誤代碼。
解決此問題需要理解Java的InputStream類:
與問題陳述中的說法相反,InputStream.available() 並不總是返回0。它提供了一個容易的估計可用資料無阻塞。但是,它可能會低估真實的數據計數。
這種簡單的方法不會施加任何阻塞或超時約束:
byte[] inputData = new byte[1024]; int result = is.read(inputData, 0, is.available());
為了進行更精細的控制,方法可以在指定的範圍內用可用資料填充緩衝區timeout:
public static int readInputStreamWithTimeout(InputStream is, byte[] b, int timeoutMillis) throws IOException { int bufferOffset = 0; long maxTimeMillis = System.currentTimeMillis() + timeoutMillis; while (System.currentTimeMillis() < maxTimeMillis && bufferOffset < b.length) { int readLength = java.lang.Math.min(is.available(), b.length - bufferOffset); int readResult = is.read(b, bufferOffset, readLength); if (readResult == -1) break; bufferOffset += readResult; } return bufferOffset; }
byte[] inputData = new byte[1024]; int readCount = readInputStreamWithTimeout(System.in, inputData, 6000); // 6 second timeout
這提供了一種從InputStream 讀取阻塞和非阻塞輸入來源的逾時的方法。
以上是如何從具有逾時的 Java 輸入流讀取資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!