我正在使用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的时候,我找不到任何一致性。现在数据的长度是静态的,我没有调整它,但我试图解决这个问题,但是数据的长度是动态的。
什么'SocketHelper.parseData'做什么? – andy256
的确如果没有这些知识,你的问题就不会回答能够。 – EJP
SockerHelper.parseData使用从client.getInputStream()返回的InputStream创建一个BufferedReader; while((line = reader.readLine())!= null)... – ahoang