簡體   English   中英

在下面的代碼中讀取沒有thread.sleep()的Java套接字輸入流嗎?

[英]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.

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