【问题标题】:Can't Get All Data From Server Using BufferedReader无法使用 BufferedReader 从服务器获取所有数据
【发布时间】:2018-07-02 12:49:44
【问题描述】:

我正在使用以下代码从服务器读取 json 数据:

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

我做错了什么?有人可以帮帮我吗?

【问题讨论】:

  • 你说的是字节还是字符?还是两者兼而有之?

标签: android bufferedreader


【解决方案1】:

我认为问题在于您指定了要读取的 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()));

【讨论】:

    猜你喜欢
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2015-06-28
    • 2018-08-06
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多