title: Why doesn't more Java code use PipedInputStream / PipedOutputStream?
body: <p>I've discovered this idiom recently, and I am wondering if there is something I am missing. I've never seen it used. Nearly all Java code I've worked with in the wild favors slurping data into a string or buffer, rather than something like this example (using HttpClient and XML APIs for example):</p>
  
  <pre><code>    final LSOutput output; // XML stuff initialized elsewhere
      final LSSerializer serializer;
      final Document doc;
      // ...
      PostMethod post; // HttpClient post request
      final PipedOutputStream source = new PipedOutputStream();
      PipedInputStream sink = new PipedInputStream(source);
      // ...
      executor.execute(new Runnable() {
              public void run() {
                  output.setByteStream(source);
                  serializer.write(doc, output);
                  try {
                      source.close();
                  } catch (IOException e) {
                      throw new RuntimeException(e);
                  }
              }});
  
      post.setRequestEntity(new InputStreamRequestEntity(sink));
      int status = httpClient.executeMethod(post);
  </code></pre>
  
  <p>That code uses a Unix-piping style technique to prevent multiple copies of the XML data being kept in memory. It uses the HTTP Post output stream and the DOM Load/Save API to serialize an XML Document as the content of the HTTP request. As far as I can tell it minimizes the use of memory with very little extra code (just the few lines for <code>Runnable</code>, <code>PipedInputStream</code>, and <code>PipedOutputStream</code>).</p>
  
  <p>So, what's wrong with this idiom? If there's nothing wrong with this idiom, why haven't I seen it?</p>
  
  <p>EDIT: to clarify, <code>PipedInputStream</code> and <code>PipedOutputStream</code> replace the boilerplate buffer-by-buffer copy that shows up everywhere, and they also allow you to process incoming data concurrently with writing out the processed data. They don't use OS pipes.</p>