【发布时间】:2020-03-01 19:51:53
【问题描述】:
我正在将这个文件:https://www.reddit.com/r/tech/top.json?limit=100 从 HttpUrlConnection 读取到 BufferedReader 中。我已经让它读取了一些文件,但它只读取了它应该读取的大约 1/10。如果我更改输入缓冲区的大小,它不会改变任何东西 - 它只是以较小的块打印相同的东西:
try{
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder sb = new StringBuilder();
int charsRead;
char[] inputBuffer = new char[500];
while(true) {
charsRead = reader.read(inputBuffer);
if(charsRead < 0) {
break;
}
if(charsRead > 0) {
sb.append(String.copyValueOf(inputBuffer, 0, charsRead));
Log.d(TAG, "Value read " + String.copyValueOf(inputBuffer, 0, charsRead));
}
}
reader.close();
return sb.toString();
} catch(Exception e){
e.printStackTrace();
}
我认为问题在于文本都在一行上,因为它的 json 格式不正确,而 BufferedReader 只能占用一行这么长的时间。有没有办法解决这个问题?
【问题讨论】:
-
无效 - 文件的 1/10 左右
-
注意:
StringBuilder有一个append(char[], int, int),这应该比创建一个String更好 -
您说的是阅读一行,但我没有看到与行的阅读/处理相关的代码。我所看到的只是读取 blocks 个字符的代码。如果你想要行,使用
readLine()方法。除了可用内存和 JavaString的最大长度之外,它对行的长度没有限制。 -
最初我使用 readLine() 这个方法: String line; while ((line = reader.readLine()) != null) { sb.append(line + "\n");由于整个文本文件是一行,因此使用 while 循环读取一行似乎很愚蠢
-
有没有可能是这部分链接的问题:
...?limit=100?