2012-12-12 35 views
0

我通過串口與設備進行通信。如何知道何時停止InputStream緩衝

我設法得到InputStream並讀取設備發送的內容。

但問題是,我根本不知道何時停止閱讀並繼續執行另一項任務。

下面是簡化的代碼:

inputStream = serialPort.getInputStream(); 
try 
{ 
    int step = 0; 
    while ((len = inputStream.read(buffer)) > -1) 
    { 
     //do something 
    }  
    System.out.println("END"); 
} 
catch (IOException e) 
{ 
    throw new Exception("IO Error"); 
} 

它從來沒有成功地達到了 「END」。即使設備不發送任何內容,它仍會繼續循環。當設備停止發送時如何停止循環。

+0

你有什麼LEN初值 –

回答

1
inputStream = serialPort.getInputStream(); 
int available = inputStream .available(); 

if (available > 0) { 
     byte data[] = new byte[available]; 
     inputStream .read(data); 

    }else{ 
    logger.info("data is not avilable"); 
    } 
+0

問題是一定的價值,我不知道它開始發送時。當它開始時,我開始做事,當它從「開始」狀態停止時。我不得不停止嘗試閱讀更多內容。或者我誤解了你的代碼。你能解釋一下嗎? – William

+0

您可以註冊SerialEvent.you可以獲得更多http://www.java-samples.com/showtutorial.php?tutorialid=11 –

+0

你是如何連接設備的? –

1

How to identify end of InputStream in java

它尋找更多的數據,因爲沒有任何東西能夠告訴它不會有更多的數據。網絡的另一端可以隨時發送更多數據。

目前尚不清楚是否你設計的客戶端/服務器協議或只是想實現它,但通常也有檢測消息的結束三種常用的方法:

  • 關閉的連接消息的結尾
  • 將消息的長度放在數據本身之前
  • 使用分隔符;這絕不會在正常 數據出現(或總是以某種方式逃脫)
+0

我正試圖實現一個現成的設備。所以我無法訪問設備的系統。我不知道爲什麼,但不幸的是,在處理完成後它會一直髮送一些隨機的字節長度。如果我強制關閉流,設備將顯示錯誤消息。我必須正確接受他們,然後停止流。你有什麼想法如何實現這一點? – William

相關問題