java – StringBuilder在转换为String时丢失了数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – StringBuilder在转换为String时丢失了数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3214字,纯文字阅读大概需要5分钟。
内容图文
![java – StringBuilder在转换为String时丢失了数据](/upload/InfoBanner/zyjiaocheng/724/35d3670e3ac24c8c9488ac12a510d840.jpg)
这有什么问题
当我尝试从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缓冲区大小,我非常确定我已正确接收所有数据
(1)我将每行附加到StringBuilder这里
( – )我将所有行追加到StringBuilder之后
(2)我尝试将其转换回String
( – )现在,问题是,当我在这里检查新的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个字符.
我建议你记录rawdata.length(),你会发现它实际上得到了所有的数据 – 它只是记录它失败了.
内容总结
以上是互联网集市为您收集整理的java – StringBuilder在转换为String时丢失了数据全部内容,希望文章能够帮你解决java – StringBuilder在转换为String时丢失了数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。