Re: ResultSet.getBinaryStream nothing more than a ResultSet.getBytes() - Mailing list pgsql-jdbc

From Oliver Jowett
Subject Re: ResultSet.getBinaryStream nothing more than a ResultSet.getBytes()
Date
Msg-id 4161DF2A.6010408@opencloud.com
Whole thread Raw
In response to ResultSet.getBinaryStream nothing more than a ResultSet.getBytes() call?  (Jeffrey Tenny <jeffrey.tenny@comcast.net>)
List pgsql-jdbc
Jeffrey Tenny wrote:
> I've been working to minimize the memory footprint of my application.
> I was under the impression that ResultSet.getBinaryStream would be more
> efficient than getBytes().  Certainly the documented semantics imply
> that that is a goal (since you must process the InputStream from
> getBinaryStream before the call to ResultSet.next() or even processing
> the next column.
>
> But the following trace from a java heap profile suggests
> that we're still just copying the bytes from the resultset as with
> getBytes() instead
> of streaming the ones already in memory, though perhaps it's because
> I'm using a read(buf) call on the stream.

The intermediate copy happens because the "in memory" version is a
text-escaped representation of the bytea value, not just a straight
bytearray.

getBinaryStream() could indeed be smarter, avoiding the intermediate
bytearray by decoding the text representation on demand. But noone has
implemented this yet.

Probably a better long-term solution is to move to binary-format results
at the protocol level. That's somewhere on my todo list, but I'm not
making much progress on it at the moment.

-O

pgsql-jdbc by date:

Previous
From: Jeffrey Tenny
Date:
Subject: ResultSet.getBinaryStream nothing more than a ResultSet.getBytes() call?
Next
From: Yamir Encarnacion
Date:
Subject: Mangled accented characters