Java’s PipedInputStream and PipedOutputStream classes allow you to write data to an OutputStream object and to read this data from an InputStream object (see the tips “Pass Data Between Threads Using Piped Streams” and “Connecting the Piped Stream Classes“). You can use the two stream classes in an application. Typically, you will create and use the PipedInputStream and PipedOutputStream objects in separate classes and in separate threads. This example shows how the output of the stream “pouts” is piped to the input of the stream “pins”. This is a result of connecting the two streams through the PipedOutputStream constructor on Line 7. On Line 11, the byte array “HELLO” is written out to “pouts.” On Lines 14 and 15, the byte array is read into “inArray” through “pins” and output to the standard output.
1. public class TestPipedStreams {2. 3. public static void main(String[] args) {4. try {5. 6. PipedInputStream pins = new PipedInputStream();7. PipedOutputStream pouts = new PipedOutputStream(pins);8. 9. byte[] outArray = {'H', 'E', 'L', 'L', 'O'};10. pouts.write(outArray, 0, 5);11. System.out.println("Wrote " + new String(outArray) + " to pouts");12. 13. byte[] inArray = new byte[5];14. pins.read(inArray, 0, 5);15. System.out.println("Read " + new String(inArray) + " from pins
");16. }17. 18. catch (Exception e) {19. e.printStackTrace();20. }21. }