2013-05-07 35 views
0

好的,所以我正在設計Android MUD客戶端作爲我學校項目的一部分。然而,在執行ANSI顏色解析時,我遇到了一個問題。我以字節爲單位讀取數據。我已經嘗試將字符「hex」設置爲'\ 033','27'和'0x1B',但我似乎無法使其檢測到轉義字符。有沒有什麼你可以看到我的檢查錯誤?此外,行「char check = String.valueOf(j).charAt(0);」是臨時的,我最初試圖檢查字符變量「十六進制」字節「j」。有沒有更好的方法來檢查角色?從套接字讀取時檢查轉義字符(0x1B, 033)

    while(isConnected) { 

        int j = 0; 

        try { 
          int i = arrayOfByte.length; 
          j = streamInput.read(arrayOfByte, 0, i); 

          char check = String.valueOf(j).charAt(0); 

          Log.d("Console","Char is - " + check); 
          if (j == -1) 
          { 

           Log.d("Console","j = -1"); 
           throw new Exception("Error while reading socket."); 
          } else if (j == 0) { 

           Log.d("Console","Continuing"); 
           continue; 
          } else if (check == hex) { 
           Log.d("Console","Yo, daddio!"); 
          } else { 

           final String strData = new String(arrayOfByte, 0, j).replace("\r", ""); 


           runOnUiThread(new Runnable() { 
            public void run() { 


             textContent.append(strData); 
             scrollToBottom(); 

            } 
           }); 

          } 
        } catch (Exception e) { 

         Handler handlerException = GameWindow.this.mHandler; 
         String strException = e.getMessage(); 
         final String strMessage = "Error while receiving from server:\r\nConnection terminated"; 

         Runnable rExceptionThread = new Runnable() 
         { 
          public void run() 
          { 
           Toast.makeText(context, strMessage, 3000).show(); 
          } 
         }; 

         handlerException.post(rExceptionThread); 

         if(strException.indexOf("reset") != -1 || strException.indexOf("rejected") != -1) 
         { 
          isConnected = false; 
          try 
          { 
           connectionSocket.close(); 
          } 
          catch (IOException e1) 
          { 
           e1.printStackTrace(); 
          } 

         } 

         isConnected = false; 
        } 

       } 

回答

1

那麼,你正在檢查讀取的字節數,而不是每個單獨的字節。

j = streamInput.read(arrayOfByte, 0, i); 

返回讀取並放入arrayOfByte這些字節的字節數。

因此,你需要做到以下幾點:

for (int n=0; n < j; n++) 
{ 
    if (arrayOfByte[n] == hex) Log.d("Console", "Yo, daddio!"); 
} 
+0

我不知道我如何能忽略的是,由於一噸,先生! – Jon 2013-05-08 18:16:48