여기에 문제가 뭐야
내 StringBuilder에서 String을 얻으려고 할 때 문제가 있습니다.
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()), 128 * 1024);
StringBuilder dataResponseSB = new StringBuilder();
String line ;
while ((line = reader.readLine()) != null) {
dataResponseSB.append(line);
if (DataFactory.DEBUG_MODE) {
// all data here are complete
Log.i("===LoadDataActivity","line: "+line);
}
}
String rawdata = new String(dataResponseSB); // dataResponseSB.toString(); also not work
if (DataFactory.DEBUG_MODE) {
// data here are lost
Log.i("===LoadDataActivity","rawdata: "+rawdata);
}
(-) BufferedReader .readLine ()에서 엄청난 데이터를받습니다.
(-) Log를 사용하여 한 줄에 약 5 줄의 8000 Buffer Size가 있는지 확인하고 모든 데이터를 올바르게 수신했는지 확인합니다.
(1) 각 줄을 StringBuilder에 추가합니다.
(-) StringBuilder에 모든 줄을 추가 한 후
(2) 다시 문자열로 변환하려고합니다.
(-) 이제 문제는 여기에서 새 문자열을 확인할 때 데이터에 8192 만 있습니다 (최소 30,000 개 이상을 포함해야 함).
무엇이 문제입니까? StringBuilder (1)에 추가 할 때 잃어 버렸거나 String으로 다시 변환 할 때 잃어버린 것인지 모르겠습니다 (2)
아래에 시도한 코드를 추가하고 UTF8과 UTF8을 모두 시도했습니다.
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
//params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, );
params.setParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 128 * 1024);
HttpClient client = new DefaultHttpClient(params);
// HttpClient client = new DefaultHttpClient(new BasicHttpParams());
HttpPost httppost = new HttpPost(DataFactory.REQUEST_API_URL + "?id=" + DataFactory.USER_ID );
// Depends on your web service
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
HttpConnectionParams.setSocketBufferSize(client.getParams(), 128 * 1024);
HttpResponse response = client.execute(httppost);
//response.setParams(client.getParams().setParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 128 * 1024));
//String rawdata = IOUtils.toString(response.getEntity().getContent(), "UTF-8");
// String rawdata = EntityUtils.toString(response.getEntity());
String rawdata = getResponseBody(response.getEntity());
//Scanner s = new Scanner(response.getEntity().getContent()).useDelimiter("\\A");
//String rawdata = s.hasNext() ? s.next() : "";
/*
//BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
// ===================
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()), 128 * 1024);
StringBuilder dataResponseSB = new StringBuilder();
String line ;
while ((line = reader.readLine()) != null) {
dataResponseSB.append(line);
if (DataFactory.DEBUG_MODE) {
Log.i("===LoadDataActivity","line: "+line);
}
}
dataResponseSB.trimToSize();
String rawdata = new String(dataResponseSB);
/*
InputStreamReader reader = new InputStreamReader(response.getEntity().getContent());
StringBuffer sb = new StringBuffer();
int c;
while ((c = reader.read()) != -1) {
sb.append((char)c);
if (DataFactory.DEBUG_MODE) {
//Log.i("===LoadDataActivity","line: "+line);
}
}
*/
나는 이것이 문제라고 확신합니다.
Log.i("===LoadDataActivity","rawdata: "+rawdata);
로그 항목에 모든 데이터 가 포함될 수 있다고 가정합니다. 각 로그 항목은 8192 자로 제한되어 있습니다.
로깅을 제안하면 rawdata.length()
실제로 모든 데이터가 있음을 알 수 있습니다. 실패한 로깅 일뿐입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다