Read-only view of ByteArrayInputStream content

Martin Desruisseaux martin.desruisseaux at geomatys.com
Wed Jul 10 17:05:29 UTC 2024


Le 2024-07-10 à 18 h 00, Archie Cobbs a écrit :
>
> So would you accept a solution to this problem in the java.sql package 
> instead? For example by adding two new methods:
>
> java.sql.Blob.asByteBuffer()
> java.sql.Clob.asCharBuffer()

Yes, it would work for me if JDBC drivers provide their own 
implementation. But it would not be exactly equivalent. A 
Blob.asByteBuffer() method would be efficient when the JDBC driver loads 
all bytes anyway, but may be expansive if the JDBC driver was really 
doing streaming. Maybe some JDBC drivers do streaming only when the Blob 
size is over some threshold (I didn't verified). Since a Blob can be 
very large, wouldn't it be safer to avoid adding API that performs an 
unconditional loading of all bytes? Unless the plan was to return an 
Optional.

By contrast, the ByteArrayInputStream.asByteBuffer() proposal never 
loads bytes that were not already in memory. Therefore, it can be used 
in a more opportunistic way ("only if all bytes happen to be in memory 
anyway, opportunistically use them directly without copy"). Also, it 
does not require changes in JDBC drivers, and could be used in contexts 
other than JDBC as well.

     Martin

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20240710/ba67556b/attachment.htm>


More information about the core-libs-dev mailing list