下载文件时流意外结束,BufferedInputStream?

时间:2018-09-20 06:01:14

标签: java download bufferedinputstream

我正在下载具有以下代码的文件

public int copy(InputStream input, RandomAccessFile out) throws IOException,
        NetworkErrorException {

    if (input == null || out == null) {
        return -1;
    }

    byte[] buffer = new byte[BUFFER_SIZE];

    BufferedInputStream inputStream = new BufferedInputStream(input, BUFFER_SIZE);
    if (DEBUG) {
        Log.v(TAG, "length" + out.length());
    }

    int count = 0, n = 0;

    long errorBlockTimePreviousTime = -1, expireTime = 0;

    try {

        out.seek(out.length());

        while (!interrupt) {
            n = inputStream.read(buffer, 0, BUFFER_SIZE);
            if (n == -1) {
                break;
            }

            out.write(buffer, 0, n);
            count += n;


            if (!NetworkUtils.isNetworkAvailable(context)) {
                throw new NetworkErrorException("Network blocked.");
            }

            if (networkSpeed == 0) {
                if (errorBlockTimePreviousTime > 0) {
                    expireTime = System.currentTimeMillis() - errorBlockTimePreviousTime;
                    if (expireTime > TIME_OUT) {
                        throw new ConnectTimeoutException("connection time out.");
                    }
                } else {
                    errorBlockTimePreviousTime = System.currentTimeMillis();
                }
            } else {
                expireTime = 0;
                errorBlockTimePreviousTime = -1;
            }
        }
    } catch (Exception socketExp) {
        socketExp.printStackTrace();
        //    Log.d("Network Blocked","  "+NetworkUtils.isNetworkAvailable(context));
        throw new NetworkErrorException("Network blocked.");
    } finally {
        if (client != null)
            client.close(); // must close client first
        if (urlConnection != null)
            urlConnection.disconnect(); // must close client first
        client = null;
        urlConnection = null;
        out.close();
        inputStream.close();
        input.close();
    }
    return count;

}

下载正常。但有时会抛出异常

EOFException: unexpected end of stream

我试图在此行从输入流中读取字节

n = inputStream.read(buffer, 0, BUFFER_SIZE);

有人可以解释我为什么会发生吗?

0 个答案:

没有答案