Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Piper implements java.lang.Runnable {
- private java.io.InputStream input;
- private java.io.OutputStream output;
- public Piper(java.io.InputStream input, java.io.OutputStream output) {
- this.input = input;
- this.output = output;
- }
- public void run() {
- try {
- // Create 512 bytes buffer
- byte[] b = new byte[512];
- int read = 1;
- // As long as data is read; -1 means EOF
- while (read > -1) {
- // Read bytes into buffer
- read = input.read(b, 0, b.length);
- //System.out.println("read: " + new String(b));
- if (read > -1) {
- // Write bytes to output
- output.write(b, 0, read);
- }
- }
- } catch (Exception e) {
- // Something happened while reading or writing streams; pipe is broken
- throw new RuntimeException("Broken pipe", e);
- } finally {
- try {
- input.close();
- } catch (Exception e) {
- }
- try {
- output.close();
- } catch (Exception e) {
- }
- }
- }
- public static java.io.InputStream pipe(java.lang.Process... proc) throws java.lang.InterruptedException {
- // Start Piper between all processes
- java.lang.Process p1;
- java.lang.Process p2;
- for (int i = 0; i < proc.length; i++) {
- p1 = proc[i];
- // If there's one more process
- if (i + 1 < proc.length) {
- p2 = proc[i + 1];
- // Start piper
- new Thread(new Piper(p1.getInputStream(), p2.getOutputStream())).start();
- }
- }
- java.lang.Process last = proc[proc.length - 1];
- // Wait for last process in chain; may throw InterruptedException
- last.waitFor();
- // Return its InputStream
- return last.getInputStream();
- }
- }
Add Comment
Please, Sign In to add comment