Как заполнить буфер при загрузке файла по сети [android]

Я работаю над шифрованием байтового массива при загрузке файла. Однако, поскольку используется сеть, данные заполняются динамически, даже если размер буферного массива фиксирован на уровне 4096. При повторной дешифровке файла мы не используем сеть, поэтому постоянно поступает 4096 байт. Шифрование и дешифрование проблемы возникают в этой области.

Я хочу знать, как размер байтов, поступающих в буфер во время загрузки, всегда можно заполнить 4096.

Спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
279
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Покажите код, в который вы загружаете файл.

Один из способов реализовать это - выполнить цикл при чтении данных из сети и продолжать проталкивать полученные байты в буфер до его заполнения (например, 4096 для вашего случая), а затем обрабатывать и очищать буфер.

Возможно, вам также придется обрабатывать случаи, когда вы получаете больше данных, которые вы можете поместить в буфер ...

мои два цента...

Ответ принят как подходящий

What I want to know is how the size of the bytes coming into the buffer at the time of downloading can always be filled with 4096.

Не может. TCP API может бесплатно предоставить вам все, что угодно, от 1 байта до размера вашего буфера.

Вам необходимо исправить ошибки в вашем коде шифрования и дешифрования. Проблема XY.

Вот решение, которое у меня есть. Вы можете получить размер буфера, какой захотите. Применяйте его, когда вам нужно.

private boolean readFully(InputStream is, byte[] data, int off, int length) {
    int read;
    while (length > 0) {
        read = is.read(data, off, length);
        if (read <=0){
            return false;
        }

        length -= read;
        off += read;
    }
    return true;
}

Другие вопросы по теме