InputStream с файлами размером более 2 ГБ - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь отправить файлы на сервер.Я получаю Uri, получаю inputstream с getContentResolver().openInputStream(uri), а затем продолжаю читать фрагменты файла и отправлять их на сервер через несколько частей.

Это все работает нормально, пока файл, который я пытаюсь отправить, не превышает 2 ГБ.Когда файл превышает это значение, процесс работает нормально до ~ 2 ГБ, тогда результат вызова .read () будет равен -1, даже если файл далеко не полностью прочитан.

После поиска в Интернете яобнаружил, что inputstream чтения ограничены Integer.MAX_VALUE.Но я не нашел обходного пути для этого.Итак, я думаю, мой вопрос, есть ли какой-нибудь метод, с помощью которого я могу прочитать за 2 ГБ?

Вот упомянутый код:

InputStream is = getContentResolver().openInputStream(fileUri);

if (is != null) {

    byte[] buffer;
    int maxBufferSize = AppController.UPLOAD_CHUNK_SIZE;
    buffer = new byte[maxBufferSize];

    int fileChunk = 0;
    int read;

    while ((read = is.read(buffer)) != -1) {

        boolean didSend = sendMultipartChunk(upFile, fileChunk, buffer);
        if (didSend) {
            fileChunk++;
        } else {
            uploadedFiles.add(new UploadableFileDTO(true));
            checkIfFinished();
            break;
            }


    }
    is.close();
    sendEndUpload(upFile);
...