2013-07-25 35 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