如何從具有逾時的 Java 輸入流讀取資料?
從具有超時的輸入流中讀取
特定問題需要量身定制的解決方案。本題旨在建構一個方法,在給定的時間限制內從 InputStream 中檢索數據,如果超過則優雅地失敗並顯示錯誤代碼。
Java InputStream 的具體注意事項
解決此問題需要理解Java的InputStream類:
- 它的read()方法不能通用
- 將InputStream 包裝到Reader 或InterruptibleChannel 類別中不會擴充可用選項。
- available() 可能隨時回傳 0。
- close() 可能會阻塞或什麼都不做。
- 無條件終止另一個執行緒不是
使用available() 檢查輸入可用性
與問題陳述中的說法相反,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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
