Como salvar em uma zipstream em modo STORED?
Estou usando o HTTP/1.1 (#526) para fazer download de múltiplos recursos. Devido a um problema de performance (#519 (closed)), estou salvando em um único arquivo tudo o que recebo. Na inexistência do suporte ao tarball, estou salvando em um zip com o modo STORED
.
Por uma questão de comodidade, eu crio uma j.i.OutputStream
onde posso escrever o resultado do download. Estou criando essa j.i.OutputStream
desse jeito:
ZipStream zip = getZipStream(nomeBase);
ZipEntry entry = new ZipEntry(nomeInterno);
entry.setMethod(ZipEntry.STORED);
OutputStream zipAsOutput = zip.asOutputStream();
return new OutputStream() {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CRC32 crc = new CRC32();
@Override
public void write(int b) throws java.io.IOException {
baos.write(b);
crc.update(b);
}
@Override
public void write(byte[] b, int off, int len) throws java.io.IOException {
baos.write(b, off, len);
crc.update(b, off, len);
}
@Override
public void close() throws java.io.IOException {
byte[] b = baos.toByteArray();
entry.setSize(b.length);
entry.setCompressedSize(b.length);
entry.setCrc(crc.getValue());
zip.putNextEntry(entry);
zipAsOutput.write(b);
zip.closeEntry();
}
};
Onde a função getZipStream
me retorna um multiton identificado por nomeBase
.
A questão toda é: a nível de SDK, esse código funciona perfeitamente. Porém, no dispositivo, recebo esse alerta:
Warning! totalcross.util.zip.ZipException: Method STORED, but crc not set
totalcross.util.zip.ZipStream.putNextEntry
br.com.softsite.sav.container.imgcollection.ImgDownloader$1.close 87
br.com.softsite.sav.container.imgcollection.ImgDownloader.gravaImagem 157
br.com.softsite.sav.container.imgcollection.ImgDownloader$2.run 203
E não executa mais os passos seguintes (onde eu esperaria ter um O arquivo está sendo salvo e ocorre o update
no banco, por exemplo). Porém a imagem é escrita no meu zip, e isso é o mais bizarro.update
no banco de dados.
Como preciso prosseguir para salvar um array de bytes em um ZIP?
Tem o ponto que no javadoc da classe
ZipFile
ela se indica como deprecada, portanto eu evito o seu uso
/** @deprecated This class was never fully implemented. Use ZipStream instead. */