/** * Creates a new instance of the AsyncTableEntryReader class. * * @param timer Timer for the whole operation. */ private AsyncTableEntryReader(@NonNull EntrySerializer serializer, @NonNull TimeoutTimer timer) { this.serializer = serializer; this.timer = timer; this.readData = new EnhancedByteArrayOutputStream(); this.result = new CompletableFuture<>(); }
DataSource() { this.data = new EnhancedByteArrayOutputStream(); this.offsets = new HashMap<>(); }
/** * Serializes the given object to an in-memory buffer (RandomAccessOutputStream) and returns a view of it. * * @param object The object to serialize. * @return An ArrayView which represents the serialized data. This provides a view (offset+length) into a Java byte * array and has APIs to extract or copy the data out of there. * @throws IOException If an IO Exception occurred. */ public ByteArraySegment serialize(T object) throws IOException { val result = new EnhancedByteArrayOutputStream(); serialize(result, object); return result.getData(); }
@Override protected EnhancedByteArrayOutputStream createInstance(byte[] initialData) { val s = new EnhancedByteArrayOutputStream(); s.write(initialData); return s; }
@Override protected EnhancedByteArrayOutputStream createInstance(byte[] initialData) { val s = new EnhancedByteArrayOutputStream(); s.write(initialData); return s; }
/** * Serializes an entire RollingSegmentHandle into a new ByteArraySegment. * * @param handle The RollingSegmentHandle to serialize. * @return A ByteArraySegment with the serialization. */ @SneakyThrows(IOException.class) static ByteArraySegment serialize(RollingSegmentHandle handle) { try (EnhancedByteArrayOutputStream os = new EnhancedByteArrayOutputStream()) { //1. Policy Max Size. os.write(combine(KEY_POLICY_MAX_SIZE, Long.toString(handle.getRollingPolicy().getMaxLength()))); //2. Chunks. handle.chunks().forEach(chunk -> os.write(serializeChunk(chunk))); return os.getData(); } }
/** * Tests the ability to serialize and deserialize objects sharing a common base class using a RandomAccessOutputStream OutputStream. */ @Test public void testMultiTypeRandomOutput() throws IOException { testMultiType(new EnhancedByteArrayOutputStream(), EnhancedByteArrayOutputStream::getData); }
/** * Tests the RandomRevisionDataOutput class with an expandable RandomAccessOutputStream. */ @Test public void testRandomOutputExpandable() throws Exception { @Cleanup val s = new EnhancedByteArrayOutputStream(); @Cleanup val impl = RevisionDataOutputStream.wrap(s); testImpl(impl, s::getData); }
private <T> void testLength(BiConsumerWithException<RevisionDataOutputStream, T> write, BiFunction<RevisionDataOutputStream, T, Integer> getLength, T value) throws Exception { @Cleanup val os = new EnhancedByteArrayOutputStream(); @Cleanup val rdos = RevisionDataOutputStream.wrap(os); val initialLength = os.getData().getLength(); write.accept(rdos, value); rdos.flush(); val expectedValue = os.getData().getLength() - initialLength; val actualValue = getLength.apply(rdos, value); Assert.assertEquals(String.format("Unexpected length for '%s'.", value), expectedValue, (int) actualValue); }
final int writeSize = 1000; final String segmentName = "Segment"; val writtenData = new EnhancedByteArrayOutputStream(); final Random rnd = new Random(0); int currentEpoch = 1;
private <T> void testEncodeDecode(BiConsumerWithException<RevisionDataOutputStream, T> write, FunctionWithException<RevisionDataInputStream, T> read, BiFunction<RevisionDataOutputStream, T, Integer> getLength, T value, BiPredicate<T, T> equalityTester) throws Exception { @Cleanup val os = new EnhancedByteArrayOutputStream(); @Cleanup val rdos = RevisionDataOutputStream.wrap(os); write.accept(rdos, value); rdos.close(); os.close(); val actualLength = os.size() - Integer.BYTES; // Subtract 4 because this is the Length being encoded. Assert.assertEquals("Unexpected length for value " + value, (int) getLength.apply(rdos, value), actualLength); @Cleanup val rdis = RevisionDataInputStream.wrap(os.getData().getReader()); val actualValue = read.apply(rdis); Assert.assertTrue(String.format("Encoding/decoding failed for %s (decoded %s).", value, actualValue), equalityTester.test(value, actualValue)); }