Reputation: 1817
I am trying to do compress an InputStream and return an InputStream:
public InputStream compress (InputStream in){
// Read "in" and write to ZipOutputStream
// Convert ZipOutputStream into InputStream and return
}
I am compressing one file (so I could use GZIP) but will do more in future (so I opted for ZIP). In most of the places:
How can I convert ZipInputStream to InputStream?
They use toBytesArray() or getBytes() which do not exist (!) - ZipOutputStream
My problems are:
How do I convert the ZipOutPutStream into InputStream if such methods don't exist?
When creating the ZipOutPutStream() there is no default constructor. Should I create a new ZipOutputStrem(new OutputStream() ) ??
Upvotes: 10
Views: 15646
Reputation: 121
Something like that:
private InputStream compress(InputStream in, String entryName) throws IOException {
final int BUFFER = 2048;
byte buffer[] = new byte[BUFFER];
ByteArrayOutputStream out = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(out);
zos.putNextEntry(new ZipEntry(entryName));
int length;
while ((length = in.read(buffer)) >= 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
zos.close();
return new ByteArrayInputStream(out.toByteArray());
}
Upvotes: 12
Reputation: 1817
Upvotes: 2