Skip to content

Instantly share code, notes, and snippets.

@stain
Created January 2, 2015 11:30
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save stain/46dd33fb49e843d333bd to your computer and use it in GitHub Desktop.
Streaming zip
Writing 0
Wrote 1
Reading folder/file1
Writing 1
Wrote 2
File time: Fri Jan 02 05:29:14 CST 2015
This is file 1
Reading folder/file2
File time: Fri Jan 02 05:29:14 CST 2015
Writing 2
Wrote 3
This is file 2
Reading folder/file3
File time: Fri Jan 02 05:29:16 CST 2015
Writing 3
Wrote 4
This is file 3
Reading folder/file4
File time: Fri Jan 02 05:29:16 CST 2015
Writing 4
Wrote 5
This is file 4
Reading folder/file5
File time: Fri Jan 02 05:29:18 CST 2015
Writing 5
Wrote 6
This is file 5
Reading folder/file6
File time: Fri Jan 02 05:29:18 CST 2015
Writing 6
Wrote 7
This is file 6
Reading folder/file7
File time: Fri Jan 02 05:29:20 CST 2015
Writing 7
Wrote 8
This is file 7
Reading folder/file8
File time: Fri Jan 02 05:29:20 CST 2015
Writing 8
Wrote 9
This is file 8
Reading folder/file9
File time: Fri Jan 02 05:29:22 CST 2015
Writing 9
Wrote 10
This is file 9
Reading folder/file10
File time: Fri Jan 02 05:29:22 CST 2015
Writing 10
Wrote 11
This is file 10
Reading folder/file11
File time: Fri Jan 02 05:29:24 CST 2015
Writing 11
Wrote 12
This is file 11
Reading folder/file12
File time: Fri Jan 02 05:29:24 CST 2015
Writing 12
Wrote 13
This is file 12
Reading folder/file13
File time: Fri Jan 02 05:29:26 CST 2015
Writing 13
Wrote 14
This is file 13
Reading folder/file14
File time: Fri Jan 02 05:29:26 CST 2015
Writing 14
Wrote 15
This is file 14
Reading folder/file15
File time: Fri Jan 02 05:29:28 CST 2015
Writing 15
Wrote 16
This is file 15
Reading folder/file16
File time: Fri Jan 02 05:29:28 CST 2015
Writing 16
Wrote 17
This is file 16
Reading folder/file17
File time: Fri Jan 02 05:29:30 CST 2015
Writing 17
Wrote 18
This is file 17
Reading folder/file18
File time: Fri Jan 02 05:29:30 CST 2015
Writing 18
Wrote 19
This is file 18
Reading folder/file19
File time: Fri Jan 02 05:29:32 CST 2015
Writing 19
Wrote 20
This is file 19
Reading folder/file20
File time: Fri Jan 02 05:29:32 CST 2015
Writing 20
Wrote 21
This is file 20
Reading folder/file21
File time: Fri Jan 02 05:29:34 CST 2015
Writing 21
Wrote 22
This is file 21
Reading folder/file22
File time: Fri Jan 02 05:29:34 CST 2015
Writing 22
Wrote 23
This is file 22
Reading folder/file23
File time: Fri Jan 02 05:29:36 CST 2015
Writing 23
Wrote 24
This is file 23
Reading folder/file24
File time: Fri Jan 02 05:29:36 CST 2015
Writing 24
Wrote 25
This is file 24
Reading folder/file25
File time: Fri Jan 02 05:29:38 CST 2015
Writing 25
Wrote 26
This is file 25
Reading folder/file26
File time: Fri Jan 02 05:29:38 CST 2015
Writing 26
Wrote 27
This is file 26
Reading folder/file27
File time: Fri Jan 02 05:29:40 CST 2015
Writing 27
Wrote 28
This is file 27
Reading folder/file28
File time: Fri Jan 02 05:29:40 CST 2015
Writing 28
Wrote 29
This is file 28
Reading folder/file29
File time: Fri Jan 02 05:29:42 CST 2015
Writing 29
Wrote 30
This is file 29
Reading folder/file30
File time: Fri Jan 02 05:29:42 CST 2015
Writing 30
Wrote 31
This is file 30
Reading folder/file31
File time: Fri Jan 02 05:29:44 CST 2015
Writing 31
Wrote 32
This is file 31
Reading folder/file32
File time: Fri Jan 02 05:29:44 CST 2015
Writing 32
Wrote 33
This is file 32
Reading folder/file33
File time: Fri Jan 02 05:29:46 CST 2015
Writing 33
Wrote 34
This is file 33
Reading folder/file34
File time: Fri Jan 02 05:29:46 CST 2015
Writing 34
Wrote 35
This is file 34
Reading folder/file35
File time: Fri Jan 02 05:29:48 CST 2015
Writing 35
Wrote 36
This is file 35
Reading folder/file36
File time: Fri Jan 02 05:29:48 CST 2015
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.nio.charset.Charset;
import java.util.Date;
import java.util.concurrent.atomic.AtomicLong;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class ZipStreamer implements Runnable {
private static final Charset UTF8 = Charset.forName("UTF-8");
private AtomicLong counter = new AtomicLong();
private PipedOutputStream out;
private ZipOutputStream zipOut;
public ZipStreamer() {
out = new PipedOutputStream();
zipOut = new ZipOutputStream(out, UTF8);
new Thread(this).start();
}
public static void main(String[] args) throws IOException {
ZipStreamer z = new ZipStreamer();
ZipInputStream zipIn = new ZipInputStream(z.getInputStream(), UTF8);
while (true) {
ZipEntry entry = zipIn.getNextEntry();
if (entry == null) {
break;
}
System.out.println("Reading " + entry.getName());
System.out.println("File time: " + new Date(entry.getTime()));
// Naive - this only works because we only produce lines in the producer
BufferedReader reader = new BufferedReader(new InputStreamReader(zipIn, UTF8));
String line = reader.readLine();
System.out.println(line);
System.out.flush();
}
}
public InputStream getInputStream() throws IOException {
return new PipedInputStream(out);
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
System.out.println("Writing " + counter.get());
ZipEntry e = new ZipEntry("folder/file" + counter.incrementAndGet());
zipOut.putNextEntry(e);
zipOut.write(("This is file " + counter.get() + "\n\n")
.getBytes(UTF8));
zipOut.closeEntry();
System.out.println("Wrote " + counter.get());
} catch (Exception e) {
try {
zipOut.close();
} catch (IOException e1) {
}
break;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment