Java needs an immutable byte array wrapper

Peter Lawrey peter.lawrey at gmail.com
Sat Nov 12 17:53:40 UTC 2016


Java 9 String has a byte [] at its core. I suspect it's not appropriate but
worth thinking about.

We have a BytesStore class which wraps bytes on or off heap which can be
used for keys.

On 12 Nov 2016 17:17, "Keith Turner" <keith at deenlo.com> wrote:

> On Sat, Nov 12, 2016 at 12:04 PM, Roman Kennke <roman at kennke.org> wrote:
> > Am Samstag, den 12.11.2016, 11:45 -0500 schrieb Keith Turner:
> >> While trying to design an API for Fluo, its become clear to me that
> >> Java could really benefit from an immutable byte array wrapper.
> >> Something like java.lang.String except for byte arrays instead of
> >> char
> >> arrays.  It would be nice if this new type interoperated well with
> >> byte[], String, ByteBuffer, InputStream, OutputStream etc.
> >>
> >> I wrote the following blog post about my experiences with this issue
> >> while designing an API for Fluo.
> >>
> >> http://fluo.apache.org/blog/2016/11/10/immutable-bytes/
> >>
> >> Is there any reason something like this should not be added to Java?
> >
> > You mean something like NIO ByteBuffers and related APIs?
>
> As I discussed in the blog post, ByteBuffers does not fit the bill of
> what I need.  In the blog post I have the following little program as
> an example to show that ByteBuffer is not immutable in the way String
> is.
>
>   byte[] bytes1 = new byte[] {1,2,3,(byte)250};
>   ByteBuffer bb1 = ByteBuffer.wrap(bytes1).asReadOnlyBuffer();
>
>   System.out.println(bb1.hashCode());
>   bytes1[2]=89;
>   System.out.println(bb1.hashCode());
>   bb1.get();
>   System.out.println(bb1.hashCode());
>
> Would not want to use ByteBuffer as a map key.  Would be nice if Java
> had something like ByteString[1] or Bytes[2].  Having a type like that
> in Java would allow to be used in library APIs and avoid copies
> between multiple implementations of an immutable byte array wrapper.
>
> [1]: https://developers.google.com/protocol-buffers/docs/
> reference/java/com/google/protobuf/ByteString
> [2]: https://static.javadoc.io/org.apache.fluo/fluo-api/1.0.0-
> incubating/org/apache/fluo/api/data/Bytes.html
>
> >
> > Roman
> >
>


More information about the discuss mailing list