Makes sense. I'll start working on a patch.
Oleg
On Wed, 2004-09-01 at 19:43, Bjarne Rasmussen wrote:
> Hi Oleg,
>
> Forgot to mention:
>
> It's not that BufferedInputStream#reset is better or faster than
> PushbackInputStream#unread. The BufferedInputStream merely supports
> mark/reset as a side-effect of doing buffering. The PushbackInputStream
> doesn't buffer. From HttpParser:
>
> public static byte[] readRawLine(InputStream inputStream) throws
> IOException {
> ByteArrayOutputStream buf = new ByteArrayOutputStream(64);
> int ch;
> while ((ch = inputStream.read()) >= 0) {
> buf.write(ch);
> if (ch == '\n') {
> break;
> }
> }
> if (buf.size() == 0) {
> return null;
> }
> return buf.toByteArray();
> }
>
> With PushbackInputStream every call to read will result in a JNI call
> in the underlying SocketInputStream. With BufferedInputStream the socket
> data is sucked in in 2K blocks thus vastly reducing the amount of JNI
> we're doing.
>
> Thanks,
> Bjarne.
>
> >>> [EMAIL PROTECTED] 9/1/2004 1:30:13 PM >>>
> Bjarne,
>
> Could you define 'considerably' in some ANSI units? ;-)
>
> I have just recently dealt with this problem. The empirical data that
> I
> got appears to suggest that there's a (more or less) constant delta in
> performance of ~2-3ms, which only makes a difference for relatively
> small payloads. For more or less real-life scenarios HttpClient should
> be at least as fast or faster than HttpUrlConnection
>
> http://marc.theaimsgroup.com/?l=httpclient-commons-dev&m=109300858528261&w=2
>
>
> I'll re-run the tests to see if this change does result in noticeable
> performance gains and poke around the Java source code to see if
> there's
> indeed a reason for PushbackInputStream#unread to be slower than
> BufferedInputStream#reset
>
> Thanks
>
> Oleg
>
>
>
> On Wed, 2004-09-01 at 18:27, Bjarne Rasmussen wrote:
> > We found a small performance discrepancy between Java's
> > HttpURLConnection and HttpClient. Disabling stale connection checks
> > helps but HttpURLConnection is still faster for small payloads.
> Making
> > the following change to HttpConnection.java (line 689 in version
> 2.0.1)
> > speeds things up considerably:
> >
> > inputStream = new BufferedInputStream(socket.getInputStream());
> >
> > The BufferedInputStream's mark/reset methods can be used in place of
> > PushbackInputStream.unread, e.g.:
> >
> > this.socket.setSoTimeout(timeout);
> > inputStream.mark(1);
> > int byteRead = inputStream.read();
> > if (byteRead != -1) {
> > inputStream.reset();
> > LOG.debug("Input data available");
> > result = true;
> > } else {
> > LOG.debug("Input data not available");
> > }
> >
> > Thanks,
> > Bjarne.
> >
> >
> >
> ---------------------------------------------------------------------
> > 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]
>
>
> ---------------------------------------------------------------------
> 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]