Manipulação Arquivos Input Output Stream

Galera preciso utilizar o pacote zip do java para compactar arquivos, fiz todos os metodos para a geracao e extração dos arquivos, vistos aqui no tutorial do guj, mas agora estou com uma duvida e se é possivel fazer esse arquivo zip nao existir fisicamente para ser disponibilizado para download em um ambiente web por exemplo, para isso gostaria de tirar todas as duvidas sobre isso.

O que seria a interface Output e inputStream?

No tutorial tinha um exemplo assim

public List<ZipEntry> criarZip(OutputStream os, File[] arquivos) throws ZipException, IOException { if (arquivos == null || arquivos.length < 1) { throw new ZipException("Adicione ao menos um arquivo ou diretório"); } List listaEntradasZip = new ArrayList(); ZipOutputStream zos = null; try { zos = new ZipOutputStream(os); for (int i = 0; i < arquivos.length; i++) { String caminhoInicial = arquivos[i].getParent(); List novasEntradas = adicionarArquivoNoZip(zos, arquivos[i], caminhoInicial); if (novasEntradas != null) { listaEntradasZip.addAll(novasEntradas); } } } finally { if (zos != null) { try { zos.close(); } catch (Exception e) { } } } return listaEntradasZip; }

o OutputStream seria o arquivo zip nao fisicamente no computador correto?

e como poderia utilizar em ambiente web para download, nao quero criar o arquivo zip no servidor, quero que em tempo de execucao disponibilize esse zip para download, estou utilizando primefaces entao fica assim

zipUtil.criarZip(/** O que passar aqui***/, arquivos) InputStream stream = new FileInputStream(zipUtil.getArquivoZipAtual()); zip = new DefaultStreamedContent(stream, "application/zip", "Arquivos.zip"); return zip;

em ambiente web eu só consigo passar para download um arquivo fisico no servidor ou nao?

Obrigado