Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Как прочитать *.zip файл в массив байт / 12 сообщений из 12, страница 1 из 1
25.04.2019, 16:21
    #39806382
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
Пытаюсь прочитать zip файл, пока безуспешно.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
File zipFile = new File("pathToZip");
Path path   = zipFile.toPath();
InputStream input = new BufferedInputStream(Files.newInputStream(path));

InputStream in = new ZipInputStream(input);

byte[] buffer = new byte[1024];

while (in.read(buffer) != -1) {}



read возвращает -1, хотя файл не пустой.
Что я делаю не так?
...
Рейтинг: 0 / 0
25.04.2019, 16:23
    #39806384
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
Там не так. Зип архив состоит из файликов. И их получают через ZipEntry. Посмотри примеры их полно.
...
Рейтинг: 0 / 0
25.04.2019, 16:40
    #39806393
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
mayton,

https://stackoverflow.com/questions/14603319/getinputstream-for-a-zipentry-from-zipinputstream-without-using-the-zipfile-cla


авторErr, the ZipInputStream already is an InputStream. You don't need another one. Getting the next ZipEntry positions the stream at the beginning of the entry. See the Javadoc.

Почему то пишут, что и с ZipInputStream должно быть ок. Может я конечно не правильно понимаю.
...
Рейтинг: 0 / 0
25.04.2019, 16:50
    #39806396
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
mayton,

Код: java
1.
2.
3.
4.
5.
while ((in.getNextEntry()) != null) {
    byte[] buffer = new byte[1024];

    while (in.read(buffer) != -1) {}
}



Так вроде заработало.
...
Рейтинг: 0 / 0
25.04.2019, 16:50
    #39806397
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
mayton, спасибо.
...
Рейтинг: 0 / 0
25.04.2019, 17:13
    #39806422
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
mr_virtus,

Да. А вот если-бы ты использовал GZip - то там связь архива и архивируемого потока была-бы 1:1.
...
Рейтинг: 0 / 0
25.04.2019, 17:16
    #39806424
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
Код: java
1.
2.
3.
4.
5.
6.
7.
File zipFile = new File("pathToZip");
Path path   = zipFile.toPath();
InputStream input = new BufferedInputStream(Files.newInputStream(path));

byte[] buffer = new byte[1024];

while (in.read(buffer) != -1) {}



Так тоже заполняет буфер, но содержимое буфера отличается если писать так

Код: java
1.
2.
3.
4.
5.
6.
InputStream in = new ZipInputStream(input);
while ((in.getNextEntry()) != null) {
    byte[] buffer = new byte[1024];

    while (in.read(buffer) != -1) {}
}



?
...
Рейтинг: 0 / 0
25.04.2019, 17:22
    #39806426
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
Мне кажется что ты теряешь ZipEntry. Этож шаблон итератора и с ним надо работать аккуратно.

Смотри как тут https://metanit.com/java/tutorial/6.12.php
...
Рейтинг: 0 / 0
25.04.2019, 17:37
    #39806437
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
mayton,

говорят zip файл содержит еще метаданные. Поэтому если читать без ZipEntry, то есть вероятность что читаешь сначала как раз их, а не содержимое самих entries. Поэтому возможно содержание массивов различается.
...
Рейтинг: 0 / 0
25.04.2019, 18:04
    #39806450
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
Я не понимаю о чем-ты. Посмотри поля ZipEntry. Size. Compressed Size. CRC. Это и есть метаданные.

Или ты имел в виду что-то другое.
...
Рейтинг: 0 / 0
25.04.2019, 18:13
    #39806457
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
mayton,

ну да. Только если не использовать ZipInputStream, а читать просто как

Код: java
1.
2.
3.
4.
5.
InputStream input = new BufferedInputStream(Files.newInputStream(path));

byte[] buffer = new byte[1024];

while (in.read(buffer) != -1) {}



то как раз и выходит, что

авторПосмотри поля ZipEntry. Size. Compressed Size. CRC попадают в мой буффер. А мне они не нужны. Мне нужны только "пользовательские данные запакованные".
...
Рейтинг: 0 / 0
25.04.2019, 18:14
    #39806459
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать *.zip файл в массив байт
mayton,

да, имел в виду это. Не точно выразился. Спасибо.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как прочитать *.zip файл в массив байт / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]