gpt4 book ai didi

java - BufferedReader 无法读取长行

转载 作者:行者123 更新时间:2023-12-01 22:00:07 25 4
gpt4 key购买 nike

我正在阅读此文件:https://www.reddit.com/r/tech/top.json?limit=100从 HttpUrlConnection 进入 BufferedReader。我已经让它读取了一些文件,但它只读取了应读取内容的 1/10 左右。如果我更改输入缓冲区的大小,它不会改变任何内容 - 它只是以较小的 block 打印相同的内容:

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 只能读取一行那么长的时间。有什么办法可以解决这个问题吗?

最佳答案

read() 应继续读取 charsRead > 0。每次调用读取时,读取器都会标记上次读取的位置,下一次调用将从该位置开始并继续,直到没有更多内容可供读取为止。它可以读取的大小没有限制。唯一的限制是数组的大小,但文件的整体大小没有限制。

您可以尝试以下方法:

try(InputStream is = connection.getInputStream(); 
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {

int read = 0;
byte[] buffer = new byte[4096];

while((read = is.read(buffer)) > 0) {
baos.write(buffer, 0, read);
}

return new String(baos.toByteArray(), StandardCharsets.UTF_8);
} catch (Exception ex){}

上述方法纯粹使用流中的字节并将其读入输出流,然后从中创建字符串。

关于java - BufferedReader 无法读取长行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58711354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com