我正在开发一个Android应用程序,它将在流中获取大量JSON数据。调用web服务是可以的,但我有一个小问题。在我的旧版本中,我使用Gson来读取流,然后我尝试将数据插入到数据库中,除了性能之外,它没有任何问题。所以我尝试改变加载数据的方法,我尝试先将数据读取到char[]中,然后再插入到数据库中。
这是我的新代码:
HttpEntity responseEntity = response.getEntity();
final int contentLength = (int) responseEntity.getContentLength();
InputStream stream = responseEntity.getContent();
InputStreamReader reader = new InputStreamReader(stream);
int readCount = 10 * 1024;
int hasread = 0;
char[] buffer = new char[contentLength];
int mustWrite = 0;
int hasread2 = 0;
while (hasread < contentLength) {
// problem is here
hasread += reader.read(buffer, hasread, contentLength - hasread);
}
Reader reader2 = new CharArrayReader(buffer);问题是阅读器开始正确读取,但在流接近尾声时,hasread变量值减少( 1)而不是增加。对我来说非常奇怪,然后while循环永远不会结束。这段代码有什么问题?
发布于 2013-03-13 16:24:56
您应该使用固定大小的缓冲区,而不是整个数据的大小( contentLength)。而byte数据类型是8位有符号二进制补码整数。
您的while循环也是错误的,您可以将其修复为:
import java.io.BufferedInputStream;
private static final int BUF_SIZE = 10 * 1024;
// ...
HttpEntity responseEntity = response.getEntity();
final int contentLength = (int) responseEntity.getContentLength();
InputStream stream = responseEntity.getContent();
BufferedInputStream reader = new BufferedInputStream(stream);
int hasread = 0;
byte[] buffer = new byte[BUF_SIZE];
while ((hasread = reader.read(buffer, 0, BUF_SIZE)) > 0) {
// For example, convert the buffer to a String
String data = new String(buffer, 0, hasread, "UTF-8");
}确保使用您自己的字符集("UTF-8"、"UTF-16"…)。
https://stackoverflow.com/questions/15379524
复制相似问题