import java.io.*; public class PB { // Pipe by Byte copy public static void main(String[] arg) throws IOException, InterruptedException { File inputFile = new File(arg[0]); File outputFile = new File(arg[1]); FileInputStream in = new FileInputStream(inputFile); FileOutputStream out = new FileOutputStream(outputFile); int c; // Create a pipe for the threads to communicate with. PipedOutputStream pipeOut = new PipedOutputStream(); PipedInputStream pipeIn = new PipedInputStream(pipeOut); // Start up the reader & writer threads. readThread rt = new readThread(in, pipeOut); writeThread wt = new writeThread(pipeIn, out); rt.start(); wt.start(); // Wait for both threads to complete. rt.join(); wt.join(); pipeIn.close(); pipeOut.close(); in.close(); out.close(); } } class readThread extends Thread { private FileInputStream input; private PipedOutputStream output; public readThread(FileInputStream in, PipedOutputStream out) { input = in; output = out; } public void run() { int c; try { while ((c = input.read()) != -1) output.write(c); } catch (Exception e) {}; } } class writeThread extends Thread { private PipedInputStream input; private FileOutputStream output; public writeThread(PipedInputStream in, FileOutputStream out) { input = in; output = out; } public void run() { int c; try { while ((c = input.read()) != -1) output.write(c); } catch (Exception e) {}; } }