Unless your client is very conforming to the rules (ie. Content-Length is
is correct wrt to available bytes) you could be waiting for a while for the
stream of data to come across or until your socket read statement timeout
int length = req.getContentLength();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int count = 0
int total = 0;
byte[] buf = new byte[8192]; // not sure which OS u have but if u are on Windows,
// use 8192 for the default OS block size
InputStream is = req.getInputStream();
while ( (count = is.read(buf) ) != -1)
{
total += count;
baos.write(buf,0,count);
}
if (total != length)
{
// handle this case as u see fit.
}
last note: bytearray is prob. better than reader/char array unless
you don't intend to handle non-character data.
> > int length = req.getContentLength();
> > char [] charArr = new char[length];
> > int readResult = 0;
> > int sum = 0;
> > do {
> > sum += readResult;
> > length -= readResult;
> > readResult = reader.read(charArr, sum, length);
> > } while (readResult < length);
>
>
> Howdy,
> Seems like a very decent fix. Thanks for posting it so
> others can have
> a future reference solution ;)
>
> I wonder if there's a java.nio solution that will perform better...
>
> Yoav Shapira
> Millennium ChemInformatics
>
>
> >-----Original Message-----
> >From: Stewart, Daniel J [mailto:[EMAIL PROTECTED]
> >Sent: Thursday, October 02, 2003 12:34 PM
> >To: Tomcat Users List
> >Subject: RE: Tomcat sucks at receiving large messages
> >
> >Since I will be occasionally receiving messages in the
> 10Mbyte range, I
> >can't read in a line at a time - it takes too long.
> >
> >The bug in the code below is because BufferedReader.read() will not
> >necessarily return the whole buffer. So I replace the line
> > reader.read(charArr);
> >With this:
> > int length = req.getContentLength();
> > char [] charArr = new char[length];
> > int readResult = 0;
> > int sum = 0;
> > do {
> > sum += readResult;
> > length -= readResult;
> > readResult = reader.read(charArr, sum, length);
> > } while (readResult < length);
> >
> >
> >Thanks for your help. Any other critiques on the use of the standard
> >library are welcome.
> >
> >Dan
> >-----Original Message-----
> >From: Shapira, Yoav [mailto:[EMAIL PROTECTED]
> >Sent: Tuesday, September 30, 2003 11:30 AM
> >To: Tomcat Users List
> >Subject: RE: Tomcat sucks at receiving large messages
> >
> >
> >
> >Howdy,
> >
> >>public void service(HttpServletRequest req,
> HttpServletResponse res) {
> >> BufferedReader reader = req.getReader();
> >> try {
> >> char [] charArr = new char[req.getContentLength()];
> >> reader.read(charArr);
> >> String str = new String(charArr);
> >>
> >> try {
> >> File f = new File("servlet.out");
> >> PrintWriter out = new PrintWriter(new FileWriter(f));
> >> out.print(str);
> >> out.flush();
> >> out.close();
> >> } catch(IOException err { System.err.println(err.toString()); }
> >>
> >> } catch(IOException err) { System.err.println(err.toString()); } }
> >
> >What happens if you ditch the req.getContentLength() approach (there
> are
> >times when it will be -1 anyways), and do something like:
> BufferedReader
> >reader = req.getReader(); StringBuffer contents = new StringBuffer();
> >String line = null; while((line = reader.readLine()) != null) {
> > contents.append(line);
> >}
> >
> >System.out.println(contents);
> >
> >(Later we'll worry about the writing -- first make sure
> you're reading
> >the entire contents).
> >
> >Yoav Shapira
> >
> >
> >
> >This e-mail, including any attachments, is a confidential business
> >communication, and may contain information that is confidential,
> >proprietary and/or privileged. This e-mail is intended only for the
> >individual(s) to whom it is addressed, and may not be saved, copied,
> >printed, disclosed or used by anyone else. If you are not the(an)
> >intended recipient, please immediately delete this e-mail from your
> >computer system and notify the sender. Thank you.
> >
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: [EMAIL PROTECTED]
> >For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: [EMAIL PROTECTED]
> >For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
>
> This e-mail, including any attachments, is a confidential
> business communication, and may contain information that is
> confidential, proprietary and/or privileged. This e-mail is
> intended only for the individual(s) to whom it is addressed,
> and may not be saved, copied, printed, disclosed or used by
> anyone else. If you are not the(an) intended recipient,
> please immediately delete this e-mail from your computer
> system and notify the sender. Thank you.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]