Повторное использование входных потоков
Дважды чтение одного и того же входного потока может быть полезно в различных сценариях. Один из таких сценариев — загрузка удаленного изображения, сохранение его локально и последующий доступ к сохраненному изображению. Чтобы добиться этого, более эффективно повторно использовать один и тот же входной поток вместо создания нового.
Один из способов повторного использования входного потока — копирование его содержимого в массив байтов. Это можно сделать с помощью метода org.apache.commons.io.IOUtils.copy. Полученный массив байтов затем можно использовать для создания нескольких объектов ByteArrayInputStream, которые можно многократно читать.
Вот пример того, как это сделать:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(in, baos);
byte[] bytes = baos.toByteArray();
// Option 1: Read the byte array multiple times
while (needToReadAgain) {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
yourReadMethodHere(bais);
}
// Option 2: Reset the input stream to read from it again
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
while (needToReadAgain) {
bais.reset();
yourReadMethodHere(bais);
}
Обратите внимание, что этот подход может не подойти для больших или бесконечных потоков, поскольку он предполагает копирование содержимого потока в память.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3