aspose file tools*
The moose likes I/O and Streams and the fly likes Question about PipedOUtputStream /  PipedInputStream Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » I/O and Streams
Bookmark "Question about PipedOUtputStream /  PipedInputStream" Watch "Question about PipedOUtputStream /  PipedInputStream" New topic
Author

Question about PipedOUtputStream / PipedInputStream

Anna Smalska
Greenhorn

Joined: Jun 02, 2010
Posts: 4
Hello,
Using pipedoutputstream and pipedinputstream is the best way of converting outputstream into inputstream, but I have got question about a pice of code, does it make sense?



I am not sure if I can just return 'in' like this, and it will still work. Could somebody say if this is ok? Thank you.
James Sabre
Ranch Hand

Joined: Sep 07, 2004
Posts: 781

Of course it should be InputStream and not inputstream but the general approach is sound.


Retired horse trader.
 Note: double-underline links may be advertisements automatically added by this site and are probably not endorsed by me.
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19696
    
  20

Your code will probably suffer from the biggest flaw in PipedInputStream / PipedOutputStream. From the Javadoc of PipedInputStream:
A pipe is said to be broken if a thread that was providing data bytes to the connected piped output stream is no longer alive.

That means that you are going to need to keep that thread alive until you close the input stream.

I have one simple way of solving this, using a helper class:
The thread will now block until either interrupted or until the returned InputStream is closed, thereby keeping it alive long enough to not cause a broken pipe. The only way a broken pipe can now occur is either the wait being interrupted, or the reading (main?) thread ending before all output is processed.


SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6
How To Ask Questions How To Answer Questions
Masa Saito
Greenhorn

Joined: Jun 08, 2010
Posts: 14
Anna Smalska wrote:Hello,
Using pipedoutputstream and pipedinputstream is the best way of converting outputstream into inputstream,

What do you mean by this? What do you want to do?
I can almost guarantee you want to use ByteArrayOutputStream / ByteArrayInputStream. Pipes are rarely used.
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19696
    
  20

The disadvantage of using those is that you'll need to store the entire byte[] into memory.
Masa Saito
Greenhorn

Joined: Jun 08, 2010
Posts: 14
Rob Prime wrote:The disadvantage of using those is that you'll need to store the entire byte[] into memory.

That is an interesting technique.
At the least, I'd test about buffering the streams and messing around with the buffer sizes.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Question about PipedOUtputStream / PipedInputStream