Специальный OutputStream для работы в память и файл в зависимости от количества входных данных - PullRequest
1 голос
/ 29 февраля 2012

В настоящее время я работаю с API-интерфейсом SSH-клиента, предоставляя мне stdout и stderr в качестве InputStreams. Я должен прочитать все данные из этих потоков на стороне клиента и предоставить API для разработчиков, чтобы иметь возможность работать с этими данными так, как они хотят (просто отбросить их, записать в БД, обработать и т. Д.). Сначала я попытался сохранить все данные в байтовых массивах, но с огромным объемом данных (иногда это может произойти) это может вызвать серьезные проблемы с памятью. Но я не хочу записывать все данные каждого вызова в файлы, если в этом нет особой необходимости.
Кто-нибудь знает о решении, которое считывает данные в память до тех пор, пока не достигнет предела (например, 1 МБ), после того, как оно записывает данные из памяти в файл и добавляет все оставшиеся данные входного потока в тот же файл?

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

commons io имеет работоспособное решение: DeferredFileOutputStream .

0 голосов
/ 29 февраля 2012

Можете ли вы избежать чтения потока, пока не узнаете, что вы собираетесь с ним делать?

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

Таким образом, вам не нужно будет одновременно читать больше 1 МБ (или меньше).

...