我正在使用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