[英]Read Java socket inputstream without thread.sleep() in the below code?
public static void waitUntil(String prompt, InputStream instr) {
while (true) {
try {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (instr.available() >= 5) {
byte[] buff = new byte[1024];
int ret_read = 0;
ret_read = instr.read(buff);
if (ret_read > 0) {
if ((new String(buff, 0, ret_read)).contains(prompt)
&& flag) {
break;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
如果刪除該thread.sleep(1000)
或什至我將其減少到小於1000,則無法正常工作。
問題 :在沒有所有傳入字節到達之前,如何在沒有thread.sleep()
情況下讀取java socket inputstream?
if (instr.available() >= 5) {
不要那樣做
無需檢查有多少字節可用,只需嘗試將一些字節讀入緩沖區即可。
它將阻塞直到至少有一個字節可用,然后返回盡可能多的字節(也適合緩沖區)。
如果那沒有返回您需要的所有字節,請循環直到獲得它們。
如果您只想閱讀所有內容,請查看以下線程: 將InputStream轉換為Java中的字節數組 。 就個人而言,我為此使用Commons IO。
使用DataInputStream.readFully()
的緩沖區大小為5(在這種情況下,或更通常是您期望的數據大小),並擺脫sleep和available()
測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.