package com.thinkaurelius.titan.diskstorage.infinispan.ext; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.nio.ByteBuffer; import java.util.Set; import org.infinispan.commons.marshall.AdvancedExternalizer; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.thinkaurelius.titan.diskstorage.StaticBuffer; import com.thinkaurelius.titan.diskstorage.util.StaticArrayBuffer; import com.thinkaurelius.titan.diskstorage.util.StaticByteBuffer; public class StaticBufferAE implements AdvancedExternalizer<StaticBuffer> { private static final long serialVersionUID = 55907937232302620L; @Override public void writeObject(ObjectOutput output, StaticBuffer sb) throws IOException { ByteBuffer b = sb.asByteBuffer(); byte[] a = b.array(); int offset = b.arrayOffset(); int len = b.remaining(); output.writeInt(len); output.write(a, offset, len); } @Override public StaticBuffer readObject(ObjectInput input) throws IOException, ClassNotFoundException { int len = input.readInt(); byte[] raw = new byte[len]; int actualLen = input.read(raw, 0, len); Preconditions.checkArgument(actualLen == len); return new StaticArrayBuffer(raw); } @Override public Set<Class<? extends StaticBuffer>> getTypeClasses() { return ImmutableSet.<Class<? extends StaticBuffer>>of( StaticBuffer.class, StaticArrayBuffer.class, StaticByteBuffer.class); } @Override public Integer getId() { return 84738478; // TODO make this configurable } }