Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 377
  • Last Modified:

Output stream seems to be getting cut off

I have this Java code below where I'm trying to output fdf(Adobe form format) data to the browser.  But when I see it in the browser, I don't seem to get the whole stream.  I don't have data in there as far as I know that tells the browser "end of file".  Should I be using getContentLength in my loop?  If not, what?  Thanks.

ServletOutputStream out = res.getOutputStream();
..
res.setContentType("text/plain");

byte data[] = new byte[req.getContentLength()];
req.getInputStream().read(data);              
 
for (int i = 0; i<req.getContentLength(); i++){
   out.print((char) data[i]);//writes the stream to the browser
 
}

fileoutput.close();
0
Mero
Asked:
Mero
1 Solution
 
Prasanna_HebbarCommented:
I could not understand this program. Basically you are trying to read the data from the input stream and write the same data back to the output stream. In case the browser did not send any data to the servlet's input stream, then nothing will be written back to the browser.
0
 
MeroAuthor Commented:
In short, the program is looking at a pdf form that has fdf data.  There is a submit button in the form that calls the servlet above.   The browser is sending data to the input stream because I did see that but I cannot see all of the data that is supposed to come from the stream.
0
 
objectsCommented:
> req.getInputStream().read(data);              

read() does not necessarilty read all the bytes. It reads as many as are available at the time and returns the number of bytes read.
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
raghu_k_nCommented:
Make sure that ur request is if type "post" and not "get"

0
 
objectsCommented:
From the read() javadoc:

"Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer."
0
 
objectsCommented:
You need to put your read in a loop something like this:

int n = buf.length;
while (n>0)
{
   int read = read(buf, buf.length - n, n);
   n -= read;

}

   
0
 
omry_yCommented:
isn`t PDF a binary format?
why are you sending it as text/plain ?
try application/octet-stream or application/binary
0
 
MeroAuthor Commented:
objects,
I am trying your example but I get an ArrayIndexOutofBounds Exception error because at one point buf.length-n will be greater than n and thus, buf won't get all of the data.  I'm trying to modify your code someway to take care of this, but your or anybody's input would be appreciated.  I am not using a buffer because last time I used one in my program,  it returned no data at all from the stream.  buf is "data" which is my byte array in my program.

omry, I'll get to your question later.
0
 
objectsCommented:
> I am trying your example but I get an
> ArrayIndexOutofBounds Exception error because at one
> point buf.length-n will be greater than n and thus, buf
> won't get all of the data.

Shouldn't be. As bytes are read n is decreased.
Have used the same code 100's of times without problem.

Can you post your code.
0
 
MeroAuthor Commented:
objects,

Never mind, it was somewhere else where I was getting an arrayoutofbounds error.  Your code worked.  Thanks.
0
 
objectsCommented:
Thanks for the points :)
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now