StringBuilder потерял данные при преобразовании в String

Вот в чем проблема

У меня проблема, когда я пытался получить String из моего StringBuilder

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 ()

(-) Я использую журнал, чтобы проверить и убедиться, что у меня есть около 5 строк из 8000 буферов на строку, и я очень уверен, что я получил все данные правильно

(1) Я добавляю каждую строку в StringBuilder Here

(-) после добавления всей строки в StringBuilder

(2) Я пытаюсь преобразовать его в String

(-) Теперь проблема, когда я проверяю новую строку здесь, данные имеют только 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 символами.

Я предлагаю вам log rawdata.length() и вы увидите, что на самом деле он получил все данные – это просто запись в журнал, которая не работает.

попробуй это,,

 public String getResponseBody(final HttpEntity entity) throws IOException, ParseException { if (entity == null) { throw new IllegalArgumentException("HTTP entity may not be null"); } InputStream instream = entity.getContent(); if (instream == null) { return ""; } if (entity.getContentLength() > Integer.MAX_VALUE) { throw new IllegalArgumentException( "HTTP entity too large to be buffered in memory"); } StringBuilder buffer = new StringBuilder(); BufferedReader reader = new BufferedReader(new InputStreamReader(instream, HTTP.UTF_8)); String line = null; try { while ((line = reader.readLine()) != null) { buffer.append(line); } } finally { instream.close(); reader.close(); } System.out.println("GEN END : " + Calendar.getInstance().getTimeInMillis()); return buffer.toString(); } 
 // Try this way,hope this will help you to solve your problem... StringBuilder buffer = new StringBuilder(); BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), HTTP.UTF_8)); String line = null; try { while ((line = reader.readLine()) != null) { buffer.append(line); } } finally { instream.close(); reader.close(); } System.out.println("Buffer : " + buffer.toString());