/* # Licensed Materials - Property of IBM # Copyright IBM Corp. 2015 */ package com.ibm.streamsx.topology.internal.spljava; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectOutputStream; import java.nio.ByteBuffer; import com.ibm.streams.operator.types.Blob; public class JavaObjectBlob implements Blob { private byte[] data; private final Object object; JavaObjectBlob(Object object) { this.object = object; } Object getObject() { return object; } @Override public long getLength() { if (data == null) serializeObject(); return data.length; } @Override public ByteBuffer getByteBuffer() { if (data == null) serializeObject(); return ByteBuffer.wrap(data); } @Override public ByteBuffer getByteBuffer(long position, int length) { if (data == null) serializeObject(); return ByteBuffer.wrap(data, (int) position, length); } @Override public InputStream getInputStream() { if (data == null) serializeObject(); return null; } @Override public byte[] getData() { if (data == null) serializeObject(); return data.clone(); } @Override public ByteBuffer put(ByteBuffer buf) { if (data == null) serializeObject(); return buf.put(data); } @Override public String toString() { return object.toString(); } /************************/ private void serializeObject() { try { AB baos = new AB(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(object); oos.flush(); oos.close(); data = baos.data(); } catch (IOException e) { throw new RuntimeException(e); } } static class AB extends ByteArrayOutputStream { AB() { super(1024); } byte[] data() { return buf; } } }