Android Can';无法使用BufferedReader从服务器获取所有数据
我使用以下代码从服务器读取json数据:Android Can';无法使用BufferedReader从服务器获取所有数据,android,bufferedreader,Android,Bufferedreader,我使用以下代码从服务器读取json数据: URL url = new URL("www.example.com/serverData.php"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.connect(); BufferedReader bufferedReader = new
URL url = new URL("www.example.com/serverData.php");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()), 8*1024);
String next;
StringBuilder total = new StringBuilder();
while ((next = bufferedReader.readLine()) != null){
total.append(next).append('\n');
}
此代码未从服务器获取所有数据。当我尝试下一行获取数据长度时,它显示大约6000个字符,而服务器返回的字符超过10000个
Log.d("Stream", String.valueOf(total.length()));
我做错了什么?有人能帮我吗?我想问题是因为您指定了8K块大小来读取,而没有相应地使用相同大小的块来调整读取循环。 您可以根据预期大小调整循环以进行读写:
int BUFFER_SIZE = 8 * 1024;
BufferedInputStream origin = new BufferedInputStream(httpConn.getInputStream(), BUFFER_SIZE);
ByteArrayOutputStream bas = new ByteArrayOutputStream();
byte data[] = new byte[BUFFER_SIZE];
int count;
while ((count = origin.read(data, 0, BUFFER_SIZE)) != -1) {
bas.write(data, 0, count);
}
origin.close();
bas.close();
Log.d("Stream", bas.toString("UTF-8"));
如果您不喜欢读取块大小(即,您可以使用平台默认值),则可以尝试如下更改代码:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
你说的是字节还是字符?或者两者都有?