private void copyWithoutHeader(Data src, byte[] dst, int dstOffset) { byte[] bytes = src.toByteArray(); System.arraycopy(bytes, HeapData.TYPE_OFFSET, dst, dstOffset, bytes.length - HeapData.TYPE_OFFSET); }
private void writeWithoutHeader(Data src, OutputStream dst) { byte[] bytes = src.toByteArray(); try { dst.write(bytes, HeapData.TYPE_OFFSET, bytes.length - HeapData.TYPE_OFFSET); } catch (IOException e) { throw new RuntimeException(e); // should never happen } }
@Override public void serialize(DataOutput dataOutput, Data data) throws IOException { byte[] b = data.toByteArray(); dataOutput.writeInt(b.length); dataOutput.write(b); }
protected JsonParser createParser(Object obj) throws IOException { Data data = (Data) obj; return factory.createParser(data.toByteArray(), HEAP_DATA_OVERHEAD + UTF_CHARACTER_COUNT_FIELD_SIZE, data.dataSize() - UTF_CHARACTER_COUNT_FIELD_SIZE); } }
@Override public void writeData(Data data) throws IOException { byte[] payload = data != null ? data.toByteArray() : null; writeByteArray(payload); }
@Override public void writeData(Data data) throws IOException { byte[] payload = data != null ? data.toByteArray() : null; writeByteArray(payload); }
/** * Converts Data to HeapData. Useful for offheap conversion. * * @param data * @return the onheap representation of data. If data is null, null is returned. */ public static Data toHeapData(Data data) { if (data == null || data instanceof HeapData) { return data; } return new HeapData(data.toByteArray()); } }
@Override public BufferObjectDataInput createInput(Data data, InternalSerializationService service) { return new ByteArrayObjectDataInput(data.toByteArray(), HeapData.DATA_OFFSET, service, byteOrder); }
@Override public BufferObjectDataInput createInput(Data data, InternalSerializationService service) { return new UnsafeObjectDataInput(data.toByteArray(), HeapData.DATA_OFFSET, service); }
/** * Converts Data to HeapData. Useful for offheap conversion. * * @param data * @return the onheap representation of data. If data is null, null is returned. */ public static Data toHeapData(Data data) { if (data == null || data instanceof HeapData) { return data; } return new HeapData(data.toByteArray()); } }
@Override public BufferObjectDataInput createInput(Data data, InternalSerializationService service) { return new ByteArrayObjectDataInput(data.toByteArray(), HeapData.DATA_OFFSET, service, byteOrder); }
@Override public BufferObjectDataInput createInput(Data data, InternalSerializationService service) { return new UnsafeObjectDataInput(data.toByteArray(), HeapData.DATA_OFFSET, service); }
@Override public BufferObjectDataInput takeInputBuffer(Data data) { BufferObjectDataInput in = inputQueue.poll(); if (in == null) { in = serializationService.createObjectDataInput((byte[]) null); } in.init(data.toByteArray(), HeapData.DATA_OFFSET); return in; }
@Override public BufferObjectDataInput takeInputBuffer(Data data) { BufferObjectDataInput in = inputQueue.poll(); if (in == null) { in = serializationService.createObjectDataInput((byte[]) null); } in.init(data.toByteArray(), HeapData.DATA_OFFSET); return in; }
@Override public byte[] toByteArray(Object value) { Data data = node.getSerializationService().toData(value); return data.toByteArray(); }
@Override public byte[] toByteArray(Object value) { Data data = node.getSerializationService().toData(value); return data.toByteArray(); }
@Override public void store(Long key, Data value) { if (!enabled) { return; } final Object actualValue; if (binary) { // WARNING: we can't pass original Data to the user actualValue = Arrays.copyOf(value.toByteArray(), value.totalSize()); } else { actualValue = serializationService.toObject(value); } store.store(key, actualValue); }
@Override public void store(Long key, Data value) { if (!enabled) { return; } final Object actualValue; if (binary) { // WARNING: we can't pass original Data to the user actualValue = Arrays.copyOf(value.toByteArray(), value.totalSize()); } else { actualValue = serializationService.toObject(value); } store.store(key, actualValue); }
@Override @SuppressWarnings("unchecked") public void store(long sequence, Data value) { final Object actualValue; if (isBinaryFormat()) { // WARNING: we can't pass original byte array to the user actualValue = Arrays.copyOf(value.toByteArray(), value.totalSize()); } else { // here we deserialize the object again (the first time is in the actual ring buffer). // if we are certain that the user cannot abuse the object, we can provide him with a reference to the // stored value actualValue = serializationService.toObject(value); } store.store(sequence, actualValue); }
@Override @SuppressWarnings("unchecked") public void storeAll(long firstItemSequence, Data[] items) { final Object[] storedItems = new Object[items.length]; for (int i = 0; i < items.length; i++) { final Data value = items[i]; if (isBinaryFormat()) { // more defensive copying in the case of binary format storedItems[i] = Arrays.copyOf(value.toByteArray(), value.totalSize()); } else { // in the case of object format we have again deserialization. We could possibly pass the user the reference // to the item in the RB store if it is safe storedItems[i] = serializationService.toObject(value); } } store.storeAll(firstItemSequence, storedItems); }