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]
