2013-12-17 147 views
0

請幫我看看如何讀取java中的數據流。我的要求是使telnet連接到路由器。這部分完成。從路由器,必須通過telnet使用其IP地址和端口號連接到xxx遠程機器。在建立這種聯繫的同時,我得到了一些迴應。但是在讀取時,程序控制在InputStream類的read()方法處停止。這裏是我用來讀取數據流的代碼片段。如何從數據流讀取數據

 buff = new byte[4*1024]; 
     ret_read = 0; 

     do 
     { 
      ret_read = in.read(buff); // Program control gets hanged here. Once all the data are read... 
      if(ret_read > 0) 
      { 
       System.out.println(new String(buff,0,ret_read)); 

      } 
     }while(ret_read > 0); 

回答

1

正在發生的事情是讀阻止,等待更多的數據流上發送的,它會繼續這樣做,直到流被關閉或更多的數據被髮送。

您需要使用非阻塞讀取,在讀取時放置超時,或者在完成發送數據後關閉流服務器端。

+0

它正在等待更多的數據讀取。但流中沒有數據。所以如何從read()方法出來。 –

+0

您可以使用available()在嘗試讀取之前查看是否有任何內容,或者您​​可以使用非阻塞連接(例如套接字通道):http://docs.oracle.com/javase/6/docs/api/java /nio/channels/SocketChannel.html –

+0

謝謝蒂姆。但InputStream類中的available()方法總是返回零。所以我會嘗試使用read()的非阻塞連接, –