Como você canalizar um inputstream a um arquivo compactado como ele é lido em com Java?

StackOverflow https://stackoverflow.com/questions/137645

  •  02-07-2019
  •  | 
  •  

Pergunta

Eu estou querendo executar um programa e como ele é executado ler na sua saída e tubo para fora a saída em um arquivo zipado. A saída do programa pode ser bastante grande, então a ideia é não prender demais na memória -. Apenas para enviá-lo para o zip como eu obtê-lo

Foi útil?

Solução

ZipOutputStream targetStream = new ZipOutputStream(fileToSaveTo);
ZipEntry entry = new ZipEntry(nameOfFileInZipFile);
targetStream.putNextEntry(entry);

byte[] dataBlock = new byte[1024];
int count = inputStream.read(dataBlock, 0, 1024);
while (count != -1) {
    targetStream.write(dataBlock, 0, count);
    count = inputStream.read(dataBlock, 0, 1024);
}

Em outras palavras:

  1. Você cria um ZipOutputStream, dando-lhe o arquivo que você deseja gravar.
  2. Você cria um ZipEntry, o que constitui um arquivo dentro desse arquivo zip. ou seja, quando você myFile.zip aberta, e há 3 arquivos lá, cada arquivo é um ZipEntry.

  3. Você coloca que ZipEntry em seu ZipOutputStream

  4. Criar um buffer de bytes para ler seus dados em.
  5. Leia de sua inputStream em seu buffer de bytes, e lembre-se a contagem.
  6. Enquanto a contagem não é -1, gravação que byte byffer ao seu zipStream.
  7. Leia a próxima linha.

Feche os seus fluxos quando você está feito. Envolvê-la em um método como você vê o ajuste.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top