簡體   English   中英

正確讀取輸入流android的方法

[英]Correct way to read input stream android

我在下面有一段代碼是從Android上的套接字接收輸入流。 它工作正常,但當手機進入睡眠狀態時,我的記錄器會瘋狂地打印出它接收到的""

從我的調試來看,這意味着我在整個循環中的if語句是不夠的?

//Global variable declaration
private OnMessageReceived mMessageListener = null;
byte[] buffer = new byte[100];   

 while (mRun) {
            int len = in.read(buffer);
            input = "";

            if (buffer != null && mMessageListener != null) {
                for (int i = 0; i < len; i++) {
                    input += (char) buffer[i];
                }
                // call the method messageReceived from MyActivity class
                mMessageListener.messageReceived(input);
                System.out.println("Recieved: " + input);
            }
            input = "";
        }

這是我的代碼,在運行while 現在,我確信我沒有在我的: if (buffer != null && mMessageListener != null)代碼中測試正確的條件。

我還能測試什么/我可以測試哪些是不正確的?

顯然,在while運行一次之后,緩沖區不是== null然后我假設當手機進入睡眠狀態時(屏幕變黑) mMessageListener變為非空?

謝謝

1)你不應該使用+運算符來連接多個字符串,它非常慢,而是使用StringBuilder。

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < len; i++) {
       sb.append((char)buffer[i]);
    }

    String input = sb.toString();

或者,如果您使用單個字符加入,這可能會更快:

    char[] inputChars = new char[len];

    for (int i = 0; i < len; i++) {
       inputChars[i] = (char)buffer[i];
    }

    String input = new String(inputChars);

有更短的方法來實現這種效果..

    String input = new String(buffer);

2)我不確定,但緩沖區在這種情況下永遠不會變為null,所以!= null語句是沒有意義的。 如果沒有數據被加入,則長度可以為0,因此請檢查len!= 0。

編輯嗯,那里有很多看似均值的陳述。 這是所有的代碼嗎? 你怎么期望事情變成null或者自己生活?

如果您想使用InputStream,最簡單的方法是使用Scanner

String text = new Scanner(in).useDelimiter("\\A").next();

這是說“掃描輸入流in ,直到最后被發現”。 您可以使用另一個分隔符將其拆分為多個部分。

你應該檢查len變量是否大於0,read方法將在到達流末尾時返回-1,這樣:

if (len>0 && buffer != null && mMessageListener != null)

暫無
暫無

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

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