|
|
|
java.util.zip.ZipOutputStream
|
|||
|---|---|---|---|
|
#18+
Добрый вечер, коллеги. Поделитесь опытом, если кто знает. У меня есть несколько входных потоков. Из каждого потока мне надо выкачать данные и сжать их в zip файлы (по одному zip файлу для каждого потока). В результате получу несколько zip файлов. Эти zip файлы мне тоже надо зазиповать в один общий zip. Для определенности, пусть имеется два входных потока InputStream1 -> content1.zip InputStream2 -> content2.zip в итоге эти два архивчика мне надо зазиповать в Documents.zip В принципе, ничего сложного. Но я хочу реализовать это так, чтобы не пришлось создавать временные файлы ни на диске ни в памяти. Хочу читать данные порциями из первого потока и по мере чтения формировать первый content1.zip и сразу же писать его в конечный Documents.zip. Потом продолжить так же со вторым потоком и в итоге получить Documents.zip без затрат дополнительной памяти. Ну разве что только для буфера. Для этого мне нужен OutputStream, в который можно писать данные порциями (в него будет писать ZipOutputStream при архивировании content1.zip), и сразу же из него эти порции считывать чтобы записать в Documents.zip. Т.е. такой фиктивный поток, типа Pipe - написал в него 1024 байта и тут же их считал. Но PipedOutputStream/PipedInputStream мне не подходят, они же для того чтобы создать Pipe между разными потоками? Можно конечно и в одном потоке аккуратно использовать... Что пришло в голову, так это взять и имплементировать свой OutputStream как мне надо. Но призадумался, может что-нибудь уже есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2013, 23:05:45 |
|
||
|
java.util.zip.ZipOutputStream
|
|||
|---|---|---|---|
|
#18+
Piped нужны для обмена данными между потоками. IOUtils.copy() здесь должно хватить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2013, 23:07:55 |
|
||
|
java.util.zip.ZipOutputStream
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPiped нужны для обмена данными между потоками. IOUtils.copy() здесь должно хватить. Про commons apache-то я и забыл.. Спасибо большое за ответ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2013, 23:10:13 |
|
||
|
java.util.zip.ZipOutputStream
|
|||
|---|---|---|---|
|
#18+
rabiter, Не, не подходит. IOUtils#copy копирует из InputStream в OutputStream. Мне же надо такой OutputStream, в который можно писать порциями и сразу же эти порции считывать. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Т.е. нужен такой OutputStream, из которого можно считать все, что в него записала последняя write операция. Я склоняюсь к тому, чтобы самому такой реализовать, там совсем тривиально должно быть. Но чем больше я думаю, тем больше мне кажется что это какая-то городушка получается. Должно существовать более простое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2013, 23:33:45 |
|
||
|
java.util.zip.ZipOutputStream
|
|||
|---|---|---|---|
|
#18+
Все, надо определенно свою имплементацию OutpouStream писать. ZipOutputStream пишет во внутрилежащий поток порциями, но не регулярно, видимо только когда у него переполняется личный внутренний буфер. Вообще он наследует FilterOutputStream. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2013, 23:40:53 |
|
||
|
java.util.zip.ZipOutputStream
|
|||
|---|---|---|---|
|
#18+
Или смешались в кучу zip и gzip/deflate или элементы в zip-архив добавляет ZipEntry . P.S. Jar , опять-таки. P.P.S. Commons Compress ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 18:11:58 |
|
||
|
java.util.zip.ZipOutputStream
|
|||
|---|---|---|---|
|
#18+
rabiter... бред какой-то Если так сделать, что именно не получается? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 18:24:27 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=247&tid=2130093]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 273ms |
| total: | 397ms |

| 0 / 0 |
