【发布时间】:2014-02-23 13:42:03
【问题描述】:
我正在开发一个 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;
}
【问题讨论】:
标签: android json garbage-collection streamreader inputstreamreader