java.io.IOException: Premature EOF

http访问第三方系统的接口时,小概率抛出下面的异常:

java.io.IOException: Premature EOF

public static String getHttpsContent(HttpsURLConnection conn,
        String characterCode) throws IOException {
    InputStream inputStream = conn.getInputStream();
    InputStreamReader inputStreamReader = new InputStreamReader(
            inputStream, characterCode);
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    String str = null;
    StringBuffer buffer = new StringBuffer();
    while ((str = bufferedReader.readLine()) != null) {
        buffer.append(str);
    }
    // 释放资源
    bufferedReader.close();
    inputStreamReader.close();
    inputStream.close();
    conn.disconnect();
 
    return buffer.toString();
}

while ((str = bufferedReader.readLine()) != null) {
            buffer.append(str);
        }

while语句有时会抛出异常:

java.io.IOException: Premature EOF

at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:565)

搜索发现,这个是普遍性的一个问题,解决方法:

https://stackoverflow.com/questions/13210108/reading-a-web-page-in-java-ioexception-premature-eof

 

修改

public static String getHttpsContent(HttpsURLConnection conn, String characterCode) throws IOException {
    InputStream inputStream = conn.getInputStream();
    InputStreamReader inputStreamReader = new InputStreamReader(
            inputStream, characterCode);
    BufferedReader bufferedReader = new BufferedReader(
            inputStreamReader);
    // fix bug:  java.io.IOException: Premature EOF
    //        at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:565)
    // https://stackoverflow.com/questions/13210108/reading-a-web-page-in-java-ioexception-premature-eof
    StringBuffer sb = new StringBuffer();
    int BUFFER_SIZE = 1024;
    char[] buffer = new char[BUFFER_SIZE]; // or some other size,
    int charsRead = 0;
    while ( (charsRead  = bufferedReader.read(buffer, 0, BUFFER_SIZE)) != -1) {
        sb.append(buffer, 0, charsRead);
    }
 
    return sb.toString();
}

搞定。原因是第三方接口可能没有发送http协议需要的结束行。

 The issue for you it may be that the server is not pushing that last end line character

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值