Android записывает InputStream из http в байтовый массив по чанкам - PullRequest
0 голосов
/ 24 января 2019

Я получаю InputStream из http-запроса, используя Url("some_url").openStream() или OkHttp's response.body().byteStream(). Цель состоит в том, чтобы прочитать этот InputStream в буфер байтового массива по чанкам и отправить их в метод API, который поддерживает возобновляемую загрузку.

Я выполнил некоторую реализацию, но этот финальный файл поврежден (архив не может быть расширен, видео не воспроизводится и т. Д.).

int UPLOAD_THRESHOLD = 1024 * 1024 * 5; // 5 MB
int uploadedSize = 0;
while ((uploadedSize + UPLOAD_THRESHOLD) < docSize) {
    Response<ResponseBody> response = fileService.updateResumableFileContent(token, 
        fileId, false, uploadedSize, getChunkBytes(inputStream, UPLOAD_THRESHOLD));
    if (response.isSuccessful()) {
            uploadedSize = uploadedSize + UPLOAD_THRESHOLD;
    }
}

Response<ResponseBody> response = fileService.updateResumableFileContent(token, 
    fileId, true, uploadedSize, getChunkBytes(inputStream, UPLOAD_THRESHOLD));
if (response.isSuccessful()) {
    return getDocument(fileId);
}
private byte[] getChunkBytes(InputStream inputStream, int offset) throws IOException {
    byte[] buffer = new byte[offset];
    int readCount = inputStream.read(buffer);
    if (readCount == -1) {
        throw new IOException();
    }
    return buffer;
}
...