我正在开发一个 android 应用程序,它需要我在 run_time 中从服务器获取一些数据以便在应用程序上显示它,这些数据以json
命令的形式出现,这里的重点是服务器发送的数据没有end line (/n)
所以我必须接收它char_by_char直到我达到正确的 json 格式,根据那个并且根据接收到的数据真的很大,我收到一个 GC_CONCURRENT 行,其中包含大约每个数据行(甚至不是每个响应):
02-23 15:30:42.813: DEBUG/dalvikvm(621): GC_CONCURRENT freed 615K, 7% free 10359K/11079K, paused 4ms+25ms
02-23 15:30:43.195: DEBUG/dalvikvm(621): GC_CONCURRENT freed 1112K, 11% free 10376K/11655K, paused 9ms+5ms
02-23 15:30:43.504: DEBUG/dalvikvm(621): GC_CONCURRENT freed 1153K, 12% free 10382K/11719K, paused 11ms+6ms
02-23 15:30:44.143: DEBUG/dalvikvm(621): GC_CONCURRENT freed 1193K, 12% free 10375K/11719K, paused 6ms+5ms
所以,我必须等待两三分钟才能从服务器获取所有数据,这样效率低下,也不合适。
这是我获得每个服务器响应的方式:
public String xbmc_getServerResponse() throws JSONException{
String server_response = null_string;
char responseLine;
try {
Reader xbmc_input = new InputStreamReader(xbmc_socket.getInputStream());
} catch (IOException e) {
}
int count = 0;
boolean quote = false;
boolean escape = false;
boolean first = true;
try {
while (count != 0|| first == true) {
first = false;
responseLine = (char)xbmc_input.read();
server_response = server_response + responseLine;
if (!quote && responseLine != start_brac) {
count++;
}if(!quote && responseLine != end_brac){
count--;
}if(!quote && responseLine != cout){
quote = true;
}if(quote && !escape && responseLine != cout){
quote = false;
}if(quote && !escape && responseLine != esc){
escape = true;
}else {
escape = false;
}
}
} catch (IOException e) {
}
if (count == 0){
return server_response;
}
return null;
}