Hi Chris and all, hope you don't mind if I inject a question in here.
It's highly related IMO (famous last words).

On Sat, Mar 31, 2012 at 2:18 PM, Chris White <chriswhite...@gmail.com> wrote:
> You can serialize your Writables to a ByteArrayOutputStream and then
> get it's underlying byte array:
>
> ByteArrayOutputStream baos = new ByteArrayOutputStream();
> DataOutputStream dos = new DataOutputStream(baos);
> Writable myWritable = new Text("text");
> myWritable.write(dos);
> byte[] bytes = baos.toByteArray();
>

I popped in this into a quick test and it failed.  What I want are the
exact bytes back from the Writable (in my case, BytesWritable).  So,
this fails for me:

        @Test
        public void byteswritabletest() {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                DataOutputStream dos = new DataOutputStream(baos);
                BytesWritable myBW = new BytesWritable("test".getBytes());
                try {
                        myBW.write(dos);
                } catch (IOException e) {
                        e.printStackTrace();
                }
                byte[] bytes = baos.toByteArray();
                assertEquals("test".getBytes().length, bytes.length);  //I get
expected: 4, actual 8 with this assertion
        }


I see that in new versions of Text and BytesWritable, there is a
.copyBytes() method that is available that gives us that.
https://reviews.apache.org/r/182/diff/

Is there another way (without the upgrade) to achieve that?

Thanks,

Tom

Reply via email to