Read-only view of ByteArrayInputStream content
Martin Desruisseaux
martin.desruisseaux at geomatys.com
Tue Jul 9 18:42:35 UTC 2024
Le 2024-07-09 à 20 h 14, Archie Cobbs a écrit :
> Gotcha - so in other words, you want a way to effectively "unwrap" the
> original byte[] array so you can access the whole thing at one time
> (random access), as opposed to just accessing it in online fashion as
> a stream of bytes.
>
Indeed, I wanted to "unwrap" the original byte[] array. But the goal was
not that much for random access (I could get the same with
readAllBytes()), but rather to avoid unnecessary array copies.
> Basically, the BLOB API seems clearly designed to allow the
> implementation to stream the data on demand if it wants to (which is
> good), but as a side effect it doesn't provide a way for the caller to
> guarantee avoidance of copying the entire array (if the implementation
> happens to not stream the data on demand).
>
Right. The wish to "unwrap" the ByteArrayInputStream original array come
from the empirical observation that many of the JDBC drivers that we are
using do not stream. Therefore, our code was like:
while (resultSet.next()) { // Potentially millions of rows
try (InputStream in = resultSet.getBinaryStream(blobColumn)) {
if (in instanceof ByteArrayInputStream) {
unwrap the original array without copy
} else {
slower path with streaming
}
}
}
For the "unwrap the array" part, a read-only ByteBuffer would be fine.
Hence the proposal for adding a ByteArrayInputStream.asByteBuffer() method.
Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20240709/d75bd146/attachment-0001.htm>
More information about the core-libs-dev
mailing list