public BufferSizePredictor getBufferSizePredictor(Object obj) { return obj == null ? NullBufferSizePredictor.INSTANCE : getBufferSizePredictor(obj.getClass()); }
@Override public BufferSizePredictor getBufferSizePredictor(Object o) { return marshallableTypeHints.getBufferSizePredictor(o.getClass()); }
@Override public byte[] objectToByteBuffer(Object o) throws IOException, InterruptedException { if (o != null) { BufferSizePredictor sizePredictor = marshallableTypeHints .getBufferSizePredictor(o.getClass()); byte[] bytes = objectToByteBuffer(o, sizePredictor.nextSize(o)); sizePredictor.recordSize(bytes.length); return bytes; } else { return objectToByteBuffer(null, 1); } }
@Override public ByteBuffer objectToBuffer(Object obj) throws IOException, InterruptedException { if (obj != null) { BufferSizePredictor sizePredictor = marshallableTypeHints .getBufferSizePredictor(obj.getClass()); int estimatedSize = sizePredictor.nextSize(obj); ByteBuffer byteBuffer = objectToBuffer(obj, estimatedSize); int length = byteBuffer.getLength(); // If the prediction is way off, then trim it if (estimatedSize > (length * 4)) { byte[] buffer = trimBuffer(byteBuffer); byteBuffer = new ByteBufferImpl(buffer, 0, buffer.length); } sizePredictor.recordSize(length); return byteBuffer; } else { return objectToBuffer(null, 1); } }