Неожиданный конец потока, BufferedInputStream при загрузке файла? - PullRequest
0 голосов
/ 20 сентября 2018

Я загружаю файл с кодом ниже

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);

Может кто-нибудь объяснить мне, почему это происходит?

...