首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复EOFException?

如何修复EOFException?
EN

Stack Overflow用户
提问于 2016-08-02 00:59:23
回答 2查看 1.7K关注 0票数 0

该代码在IDE上运行良好,但每当我将它实现到应用程序(用于Android)上时,它总是给我一个EOFException

这是代码:

代码语言:javascript
复制
try {
  URL url = new URL(link);

  URLConnection con = url.openConnection();
  BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));

  StringBuilder sb = new StringBuilder();
  String inputLine;

  while ((inputLine = bf.readLine()) != null) {
    sb.append(inputLine);
  }

  bf.close();

} catch (Exception e) {
  e.printStackTrace();
}

这是堆栈跟踪

代码语言:javascript
复制
java.io.EOFException
W/System.err:     at com.android.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:95)
W/System.err:     at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:179)
W/System.err:     at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:628)
W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:409)
W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:353)
W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:220)
W/System.err:     at com.example.unknown.api_testing.MainActivity$1.doInBackground(MainActivity.java:45)
W/System.err:     at com.example.unknown.api_testing.MainActivity$1.doInBackground(MainActivity.java:35)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:292)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err:     at java.lang.Thread.run(Thread.java:818)
EN

回答 2

Stack Overflow用户

发布于 2016-08-02 02:20:24

这可能是由于您的设备上的连接。您是在运行WiFi还是3G连接?

您的设备可能正在丢失连接或丢弃一些数据包。为了确保连接运行良好,运行QOS测试可能是值得的。

查看一个应用程序,如:GB

您还可能希望检查连接是否正确地返回了END HTTP,并且没有在之后抛出错误。将每个inputLine输出到您的控制台,同时处理它以检查是否有异常。

如果引发异常,您还可能希望调整try catch块,以正确关闭读取器。对于catch块也要更加具体,例如: catch IOException而不是Exception,因为这将使您能够更干净地处理这些情况,因为您可能希望处理与其他Exceptions不同的IOExceptions

代码语言:javascript
复制
try 
{
    URL url = new URL(link);

    URLConnection con = url.openConnection();
    BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));

    StringBuilder sb = new StringBuilder();
    String inputLine;

    while ((inputLine = bf.readLine()) != null) 
    {
        sb.append(inputLine);
    }
} 
catch (IOException e) 
{
    e.printStackTrace();
} 
finally 
{
    //close your reader here
    bf.close();
}
票数 -1
EN

Stack Overflow用户

发布于 2016-08-02 01:58:35

行后: URLConnection con = url.openConnection();

将这一行放在orger中,以避免收到gzip响应。

代码语言:javascript
复制
        con.setRequestProperty("Accept-Encoding", "identity"); // no gzip
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38710257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档