aspose file tools*
The moose likes I/O and Streams and the fly likes reading a file written to OutputStream Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Soft Skills this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » I/O and Streams
Bookmark "reading a file written to OutputStream" Watch "reading a file written to OutputStream" New topic
Author

reading a file written to OutputStream

Jay Ram
Ranch Hand

Joined: Dec 13, 2005
Posts: 40
Hello,
I have a method that I need to call that would return a pdf image. But instead of anything being returned from the method, the method writes to a outputstream that is passed as a parameter.

The method signature:
public void getPDFFile(inputParams, OutputStream stream)

My problem is I am again a intermediate application where I need to read the stream and pass it to my calling app as byte array. My calling app cannot pass the outputStream.

How can I achieve this?
Can BufferedOutputStream be useful for this?

Appreciate any help on this..

Thanks.
Jay Ram
Ranch Hand

Joined: Dec 13, 2005
Posts: 40
I wrote a small snippet to achieve this.. Can anybody comment if this looks okay..
Or shd I use a different OutputStream..

I am also trying to get info on how my calling app writes the data to the stream.. All I know for now is that I'll get a pdf file thro an OutputStream.

Thanks.
--------------------------

>
Don Blodgett
Ranch Hand

Joined: Jan 09, 2006
Posts: 61
If I understand correctly you are looking to create a PDF file, is there any reason you cannot write directly out to a PDF via FileOutputStream? If you need to read the contents on the PDF and do some sort of manipulation on it you would probably be better served using a PipedOutputStream.
Jay Ram
Ranch Hand

Joined: Dec 13, 2005
Posts: 40
Thanks for the response Don.

The reason I was not using FileOutputStream is because if I understand right, I have to give a file name in that case. Since this is an online application, I dont want to create files in the server. I just want to receive it as bytes and pass it to the calling application.

Please let me know if there is a way I can do this without explicitly using a file name..

thanks.
Don Blodgett
Ranch Hand

Joined: Jan 09, 2006
Posts: 61
In that case you will want to use the PipedOutputStream linked to a PipedInputStream. Once you pass the PipedOutputStream instance into the method which takes the OutputStream as an argument, assuming the getPdfFile(String, OutputStream) method is constructed such that it uses a separate Thread to write to the OutputStream, you can then return the PipedInputStream and the user of your method can read from the returned InputStream just as they would any other. If on the other hand the getPdfFile method doesn't write from a separate thread, then you will have to wrap the call to that method in a separate thread created by you, at which point you would have to do a little more exception handling and thread cleanup. Examples of such can be found along with the PipedIn/OutputStream examples through Google.
Jay Ram
Ranch Hand

Joined: Dec 13, 2005
Posts: 40
Thanks again for your response Don.
Paul Clapham
Bartender

Joined: Oct 14, 2005
Posts: 18987
    
    8

Jay Ram wrote:Since this is an online application, I dont want to create files in the server. I just want to receive it as bytes and pass it to the calling application.

Please let me know if there is a way I can do this without explicitly using a file name...


At least two ways. You could write it to a ByteArrayOutputStream, then get the bytes from that. Or quite possibly, if your goal is to send the PDF as the response to an HTTP request, you could just write it directly to the request's output stream. In the latter case you wouldn't have the intermediate step of creating an array of bytes.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: reading a file written to OutputStream