@Override public DataInputStream getDataInputStream() { return underlying.getDataInputStream(); }
@Override protected Long doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final long value = inputStream.readLong(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected Float doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final float value = inputStream.readFloat(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected Integer doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final int value = inputStream.readUnsignedShort(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected Byte doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final byte value = inputStream.readByte(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected Integer doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final int value = inputStream.readUnsignedByte(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected Boolean doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final boolean value = inputStream.readBoolean(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected Integer doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final int value = inputStream.readInt(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected Character doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final char value = inputStream.readChar(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected Double doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final double value = inputStream.readDouble(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected Short doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final short value = inputStream.readShort(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected String doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final String value = inputStream.readUTF(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append(value)); } return value; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected byte[] doRead(final DataInputExtended input) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final int length = inputStream.readInt(); if (LOG.isDebugEnabled()) { final StringBuilder msg = new StringBuilder().append("length:").append(length).append(" [BYTE ARRAY]"); log(this, msg); } final byte[] bytes = new byte[length]; readBytes(inputStream, bytes); return bytes; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } }
@Override protected Serializable doRead(final DataInputExtended input) throws IOException { try { if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append("[SERIALIZABLE]")); } // read in a blob of bytes final ObjectInputStream ois = new ObjectInputStream(input.getDataInputStream()); try { return (Serializable) ois.readObject(); } catch (final ClassNotFoundException ex) { throw new FailedToDeserializeException(ex); } } finally { if (LOG.isDebugEnabled()) { unlog(this); } } }
@Override @SuppressWarnings("unchecked") protected <Q> Q[] doReadArray(final DataInputExtended input, final Class<Q> elementType) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final int length = inputStream.readInt(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append("length: ").append(length)); } final Q[] values = (Q[]) Array.newInstance(elementType, length); for (int i = 0; i < values.length; i++) { // using FieldType to read in takes care of null handling values[i] = (Q) FieldType.SERIALIZABLE.read(input); } return values; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } }
@Override protected char[] doRead(final DataInputExtended input) throws IOException { try { final StringBuilder buf = new StringBuilder(); final DataInputStream inputStream = input.getDataInputStream(); final int length = inputStream.readInt(); if (LOG.isDebugEnabled()) { buf.append("length: ").append(length); } final char[] values = new char[length]; for (int i = 0; i < values.length; i++) { if (LOG.isDebugEnabled()) { buf.append(i == 0 ? ": " : ", "); buf.append(values[i]); } values[i] = inputStream.readChar(); } if (LOG.isDebugEnabled()) { log(this, buf); } return values; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected boolean[] doRead(final DataInputExtended input) throws IOException { try { final StringBuilder buf = new StringBuilder(); final DataInputStream inputStream = input.getDataInputStream(); final int length = inputStream.readInt(); if (LOG.isDebugEnabled()) { buf.append("length: ").append(length); } final boolean[] values = new boolean[length]; for (int i = 0; i < values.length; i++) { values[i] = inputStream.readBoolean(); if (LOG.isDebugEnabled()) { buf.append(i == 0 ? ": " : ", "); buf.append(values[i]); } } if (LOG.isDebugEnabled()) { log(this, buf); } return values; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@Override protected double[] doRead(final DataInputExtended input) throws IOException { try { final StringBuilder buf = new StringBuilder(); final DataInputStream inputStream = input.getDataInputStream(); final int length = inputStream.readInt(); if (LOG.isDebugEnabled()) { buf.append("length: ").append(length); } final double[] values = new double[length]; for (int i = 0; i < values.length; i++) { values[i] = inputStream.readDouble(); if (LOG.isDebugEnabled()) { buf.append(i == 0 ? ": " : ", "); buf.append(values[i]); } } if (LOG.isDebugEnabled()) { log(this, buf); } return values; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } } };
@SuppressWarnings("unchecked") @Override protected <Q> Q[] doReadArray(final DataInputExtended input, final Class<Q> elementType) throws IOException { try { final DataInputStream inputStream = input.getDataInputStream(); final int length = inputStream.readInt(); if (LOG.isDebugEnabled()) { log(this, new StringBuilder().append("length: ").append(length)); } final Q[] values = (Q[]) Array.newInstance(elementType, length); for (int i = 0; i < values.length; i++) { // using FieldType to read in takes care of null handling values[i] = (Q) FieldType.ENCODABLE.read(input); } return values; } finally { if (LOG.isDebugEnabled()) { unlog(this); } } }
public final T read(final DataInputExtended input) throws IOException { final DataInputStream inputStream = input.getDataInputStream(); final byte fieldTypeIdxAndNullability = inputStream.readByte(); final boolean isNull = fieldTypeIdxAndNullability >= NULL_BIT; final byte fieldTypeIdx = (byte) (fieldTypeIdxAndNullability - (isNull ? NULL_BIT : 0)); try { final FieldType<?> fieldType = FieldType.get(fieldTypeIdx); if (fieldType == null || (fieldType.checksStream() && fieldType != this)) { throw new IllegalStateException("Mismatch in stream: expected " + this + " but got " + fieldType + " (" + fieldTypeIdx + ")"); } if (isNull && LOG.isDebugEnabled()) { // only log if reading a null; otherwise actual value read // logged later log(this, new StringBuilder().append("(null)")); } if (isNull) { return null; } else { return doRead(input); } } finally { if (isNull && LOG.isDebugEnabled()) { // only unlog if reading a null unlog(this); } } }