使用BufferedReader在Java中过早出现EOF异常
我试图将url(它只是文本)转换为字符串,并使用BufferedReader读取url。然而,我一直得到一个过早的EOF异常。这是我到目前为止所拥有的使用BufferedReader在Java中过早出现EOF异常,java,url,bufferedreader,eof,ioexception,Java,Url,Bufferedreader,Eof,Ioexception,我试图将url(它只是文本)转换为字符串,并使用BufferedReader读取url。然而,我一直得到一个过早的EOF异常。这是我到目前为止所拥有的 try { URL sUrl = new URL(url); String result = ""; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(
try {
URL sUrl = new URL(url);
String result = "";
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(sUrl.openStream()));
String av;
while ((av = br.readLine()) != null) {
result += av;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println(result.length());
} catch (Exception e) {
e.printStackTrace();
}
此外,我还尝试实现这个解决方案,我在另一个stackoverflow线程上看到了这个解决方案
try {
URL oracle = new URL(url);
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));
StringBuffer input = new StringBuffer();
int BUFFER_SIZE = 2000000;
char[] buffer = new char[BUFFER_SIZE];
int charsRead = 0;
while ((charsRead = in.read(buffer, 0, BUFFER_SIZE)) != -1) {
input.append(buffer, 0, charsRead);
}
in.close();
System.out.println(input.toString().length());
} catch (Exception e) {
e.printStackTrace();
}
这两种方法都会导致代码的.read/.readLine部分出现相同的错误
这是stacktrace
java.io.IOException: Premature EOF
at java.base/sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:257)
at java.base/sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:689)
at java.base/java.io.FilterInputStream.read(FilterInputStream.java:133)
at java.base/sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3501)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:185)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392)
at com.github.doomsdayrs.jikan4java.ExampleClass.main(ExampleClass.java:99)
错误是什么?java.io.IOException:Premature EOFWhy不使用,例如,捕获网页并使用保存到文件?我认为如果我为每个唯一的新url创建一个新文件,可能会造成很多混乱。但我确实尝试过将url转换成一个文件,然后从文件中读取,这很有效。是否有一个很好的方式删除文件后不久,他们以高效的方式生成,我没有看它,是新的东西这样。你可以确认如果例外发生在内容的结尾,你想阅读,或它只是随机弹出在哪里在中间?如果它总是出现在内容的末尾,则可能意味着其中存在Java错误,或者concent的格式不正确。您可以尝试在try/catch块中包装read或readLine调用,并捕获IOException作为文件结束的信号