Как мне распаковать файл и прочитать его в ByteBuffer в Java? - PullRequest
0 голосов
/ 01 апреля 2012

У меня есть такой фрагмент кода ...

FileInputStream fi = new FileInputStream(filein);
GZIPInputStream gzis = new GZIPInputStream(fi);
ByteBuffer bbuffer = ByteBuffer.allocate(115200);

fi.available() - 84300, но gzis.available() - только 1. file(filein) уже сжат.

Я хочу прочитать файл, распаковать его и, наконец, положить его в мой ByteBuffer bbufer.

Как я могу реализовать эту операцию?

1 Ответ

0 голосов
/ 01 апреля 2012

gzis.available() = 1; не означает, что есть проблема, это просто означает, что вы можете прочитать только 1 байт информации из потока, прежде чем сможете продолжить.вы не можете ожидать, что весь несжатый файл будет доступен в одной команде.

Чтобы прочитать весь файл, вам понадобится цикл, который продолжает считывать InputStream, пока у вас не будут все данные,Например ...

int bytesRead = 0;
int bytesAvailable = gzis.available();
while (bytesAvailable > 0){
    gzis.read(bbuffer,bytesRead,bytesAvailable);
    bytesRead += bytesAvailable;
    bytesAvailable = gzis.available();
}

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

...