@Override public byte[] writeField(final Integer fieldValue) { if (fieldValue == null) { return new byte[] {}; } final ByteBuffer buf = ByteBuffer.allocate(VarintUtils.signedIntByteLength(fieldValue)); VarintUtils.writeSignedInt(fieldValue, buf); return buf.array(); } }
@Override public byte[] writeField(final BigDecimal fieldValue) { if (fieldValue == null) { return new byte[] {}; } final byte[] unscaled = fieldValue.unscaledValue().toByteArray(); final ByteBuffer buf = ByteBuffer.allocate( VarintUtils.signedIntByteLength(fieldValue.scale()) + unscaled.length); VarintUtils.writeSignedInt(fieldValue.scale(), buf); buf.put(unscaled); return buf.array(); } }
@Override public byte[] toBinary() { final byte[] timeZone = StringUtils.stringToBinary(timezone); final ByteBuffer binary = ByteBuffer.allocate(timezone.length() + VarintUtils.signedIntByteLength(unit.calendarEnum)); VarintUtils.writeSignedInt(unit.calendarEnum, binary); binary.put(timeZone); return binary.array(); }
@Override public byte[] writeField(final Object[] fieldValue) { if (fieldValue == null) { return new byte[] {}; } ByteArrayOutputStream baos = new ByteArrayOutputStream(); final DataOutputStream output = new DataOutputStream(baos); try { for (Object attr : fieldValue) { ByteBuffer lengthBytes; if (attr == null) { lengthBytes = ByteBuffer.allocate(VarintUtils.signedIntByteLength(-1)); VarintUtils.writeSignedInt(-1, lengthBytes); output.write(lengthBytes.array()); continue; } FieldWriter writer = FieldUtils.getDefaultWriterForClass(attr.getClass()); byte[] binary = writer.writeField(attr); lengthBytes = ByteBuffer.allocate(VarintUtils.signedIntByteLength(binary.length)); VarintUtils.writeSignedInt(binary.length, lengthBytes); output.write(lengthBytes.array()); output.write(binary); } output.close(); } catch (IOException e) { LOGGER.error("Unable to write to output", e); } return baos.toByteArray(); }
@Override public byte[] writeField(Integer[] fieldValue) { if (fieldValue == null) { return new byte[] {}; } int bytes = VarintUtils.unsignedIntByteLength(fieldValue.length); for (final Integer value : fieldValue) { bytes++; if (value != null) { bytes += VarintUtils.signedIntByteLength(value); } } final ByteBuffer buf = ByteBuffer.allocate(bytes); VarintUtils.writeUnsignedInt(fieldValue.length, buf); for (final Integer value : fieldValue) { if (value == null) { buf.put((byte) 0x0); } else { buf.put((byte) 0x1); VarintUtils.writeSignedInt(value, buf); } } return buf.array(); } }
@Override public byte[] writeField(final int[] fieldValue) { if (fieldValue == null) { return new byte[] {}; } int bytes = VarintUtils.unsignedIntByteLength(fieldValue.length); for (final int value : fieldValue) { bytes += VarintUtils.signedIntByteLength(value); } final ByteBuffer buf = ByteBuffer.allocate(bytes); VarintUtils.writeUnsignedInt(fieldValue.length, buf); for (final int value : fieldValue) { VarintUtils.writeSignedInt(value, buf); } return buf.array(); } }