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]