private static int dissectSocketAddress( final MutableDirectBuffer buffer, final int offset, final StringBuilder builder) { int relativeOffset = 0; final int port = buffer.getInt(offset + relativeOffset, LITTLE_ENDIAN); relativeOffset += SIZE_OF_INT; final byte[] addressBuffer = new byte[buffer.getInt(offset + relativeOffset)]; relativeOffset += SIZE_OF_INT; buffer.getBytes(offset + relativeOffset, addressBuffer); relativeOffset += addressBuffer.length; try { builder .append(InetAddress.getByAddress(addressBuffer).getHostAddress()) .append('.') .append(port); } catch (final Exception ex) { ex.printStackTrace(); } return relativeOffset; }
@Test public void shouldAppendOneBufferWithoutResizing() { final UnsafeBuffer srcBuffer = new UnsafeBuffer(new byte[MIN_ALLOCATED_CAPACITY]); final byte[] bytes = "Hello World".getBytes(StandardCharsets.UTF_8); srcBuffer.putBytes(0, bytes, 0, bytes.length); bufferBuilder.append(srcBuffer, 0, bytes.length); final byte[] temp = new byte[bytes.length]; bufferBuilder.buffer().getBytes(0, temp, 0, bytes.length); assertThat(bufferBuilder.limit(), is(bytes.length)); assertThat(bufferBuilder.capacity(), is(MIN_ALLOCATED_CAPACITY)); assertArrayEquals(temp, bytes); }
@Test public void shouldAppendTwoBuffersWithoutResizing() { final UnsafeBuffer srcBuffer = new UnsafeBuffer(new byte[MIN_ALLOCATED_CAPACITY]); final byte[] bytes = "1111111122222222".getBytes(StandardCharsets.UTF_8); srcBuffer.putBytes(0, bytes, 0, bytes.length); bufferBuilder.append(srcBuffer, 0, bytes.length / 2); bufferBuilder.append(srcBuffer, bytes.length / 2, bytes.length / 2); final byte[] temp = new byte[bytes.length]; bufferBuilder.buffer().getBytes(0, temp, 0, bytes.length); assertThat(bufferBuilder.limit(), is(bytes.length)); assertThat(bufferBuilder.capacity(), is(MIN_ALLOCATED_CAPACITY)); assertArrayEquals(temp, bytes); }
@Test public void shouldFillBufferWithoutResizing() { final int bufferLength = 128; final byte[] buffer = new byte[bufferLength]; Arrays.fill(buffer, (byte)7); final UnsafeBuffer srcBuffer = new UnsafeBuffer(buffer); final BufferBuilder bufferBuilder = new BufferBuilder(bufferLength); bufferBuilder.append(srcBuffer, 0, bufferLength); final byte[] temp = new byte[bufferLength]; bufferBuilder.buffer().getBytes(0, temp, 0, bufferLength); assertThat(bufferBuilder.limit(), is(bufferLength)); assertThat(bufferBuilder.capacity(), is(bufferLength)); assertArrayEquals(temp, buffer); }
@Test public void shouldResizeWhenBufferJustDoesNotFit() { final int bufferLength = 128; final byte[] buffer = new byte[bufferLength + 1]; Arrays.fill(buffer, (byte)7); final UnsafeBuffer srcBuffer = new UnsafeBuffer(buffer); final BufferBuilder bufferBuilder = new BufferBuilder(bufferLength); bufferBuilder.append(srcBuffer, 0, buffer.length); final byte[] temp = new byte[buffer.length]; bufferBuilder.buffer().getBytes(0, temp, 0, buffer.length); assertThat(bufferBuilder.limit(), is(buffer.length)); assertThat(bufferBuilder.capacity(), greaterThan(bufferLength)); assertArrayEquals(temp, buffer); }
@Test public void shouldAppendTwoBuffersAndResize() { final int bufferLength = 128; final byte[] buffer = new byte[bufferLength]; final int firstLength = buffer.length / 4; final int secondLength = buffer.length / 2; Arrays.fill(buffer, 0, firstLength + secondLength, (byte)7); final UnsafeBuffer srcBuffer = new UnsafeBuffer(buffer); final BufferBuilder bufferBuilder = new BufferBuilder(bufferLength / 2); bufferBuilder.append(srcBuffer, 0, firstLength); bufferBuilder.append(srcBuffer, firstLength, secondLength); final byte[] temp = new byte[buffer.length]; bufferBuilder.buffer().getBytes(0, temp, 0, secondLength + firstLength); assertThat(bufferBuilder.limit(), is(firstLength + secondLength)); assertThat(bufferBuilder.capacity(), greaterThanOrEqualTo(firstLength + secondLength)); assertArrayEquals(temp, buffer); }
@Override public void writeJSON(StringBuilder builder) { final byte[] bytes = new byte[length]; data.getBytes(0, bytes); builder.append("\""); builder.append(new String(Base64.getEncoder().encode(bytes), StandardCharsets.UTF_8)); builder.append("\""); }
@Override public void writeJSON(StringBuilder builder) { final byte[] bytes = new byte[length]; data.getBytes(0, bytes); builder.append("\""); builder.append(new String(Base64.getEncoder().encode(bytes), StandardCharsets.UTF_8)); builder.append("\""); }
private static int dissectSocketAddress( final MutableDirectBuffer buffer, final int offset, final StringBuilder builder) { int relativeOffset = 0; final int port = buffer.getInt(offset + relativeOffset, LITTLE_ENDIAN); relativeOffset += SIZE_OF_INT; final byte[] addressBuffer = new byte[buffer.getInt(offset + relativeOffset)]; relativeOffset += SIZE_OF_INT; buffer.getBytes(offset + relativeOffset, addressBuffer); relativeOffset += addressBuffer.length; try { builder .append(InetAddress.getByAddress(addressBuffer).getHostAddress()) .append('.') .append(port); } catch (final Exception ex) { ex.printStackTrace(); } return relativeOffset; }
@Override public void onMessage(int msgTypeId, MutableDirectBuffer buffer, int index, int length) { ChannelBuffer message = ChannelBuffers.buffer(NATIVE_ORDER, SIZE_OF_INT + length); message.setInt(0, msgTypeId); buffer.getBytes(index, message.array(), message.arrayOffset() + SIZE_OF_INT, length); message.writerIndex(SIZE_OF_INT + length); fireMessageReceived(AgronaChannel.this, message); }