2013-07-25 63 views
0

我正在使用Socket連接來連接到數據庫。當我通過InputStream從數據庫中提取數據時,有時它會返回完整的數據,但大多數情況下它會返回不完整的數據(5%/ 95%)。有一個數據庫發送的EOF,但它只有大約5%的時間。InputStream接收不完整的數據

@Override 
    protected Socket doInBackground(Void... params) { 


     Socket client = null; 
     try { 
      client = new Socket(SocketHelper.IP_ADDRESS, SocketHelper.PORT); 

      //output message 
      OutputStream output = client.getOutputStream(); 
      output.write(message.getBytes("UTF-8")); 


      //parse response 
    //blocks here more of the time 
      SocketHelper.parseData(client.getInputStream()); 


     } catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     return client; 
    } 

在我的解析方法中,我尋找EOF並且通常關閉InputStream並關閉Socket。在達到EOF的時候,我找不到任何一致性。現在數據的長度是靜態的,我沒有調整它,但我試圖解決這個問題,但是數據的長度是動態的。

+0

什麼'SocketHelper.parseData'做什麼? – andy256

+0

的確如果沒有這些知識,你的問題就不會回答能夠。 – EJP

+0

SockerHelper.parseData使用從client.getInputStream()返回的InputStream創建一個BufferedReader; while((line = reader.readLine())!= null)... – ahoang

回答

-1

要從Socket讀取數據,請在你的parseData 。方法需要循環,調用read(byte[] b, int off, int len)直到所有你期待已抵達字節

read方法返回的字節數實際讀取;不斷循環,直到你把一切都記得要調整偏移參數,從而使。你建立完整的信息

+0

我使用BufferedReader從Socket讀取InputStream – ahoang