private Object decodePrimitiveArray(int len, TCDataInput input) throws IOException { final byte type = input.readByte(); switch (type) { case TYPE_ID_BOOLEAN: checkSize(Boolean.TYPE, BOOLEAN_WARN, len); return decodeBooleanArray(len, input); case TYPE_ID_BYTE: checkSize(Byte.TYPE, BYTE_WARN, len); return decodeByteArray(len, input); case TYPE_ID_CHAR: checkSize(Character.TYPE, CHAR_WARN, len); return decodeCharArray(len, input); case TYPE_ID_DOUBLE: checkSize(Double.TYPE, DOUBLE_WARN, len); return decodeDoubleArray(len, input); case TYPE_ID_FLOAT: checkSize(Float.TYPE, FLOAT_WARN, len); return decodeFloatArray(len, input); case TYPE_ID_INT: checkSize(Integer.TYPE, INT_WARN, len); return decodeIntArray(len, input); case TYPE_ID_LONG: checkSize(Long.TYPE, LONG_WARN, len); return decodeLongArray(len, input); case TYPE_ID_SHORT: checkSize(Short.TYPE, SHORT_WARN, len); return decodeShortArray(len, input); default: throw Assert.failure("unknown prim type: " + type); } // unreachable }
@Override public Object decode(TCDataInput input, ObjectStringSerializer serializer) throws IOException, ClassNotFoundException { final byte type = input.readByte(); switch (type) { case TYPE_ID_ENUM: return readEnum(input, type, serializer); case TYPE_ID_ENUM_HOLDER: return readEnum(input, type, serializer); case TYPE_ID_JAVA_LANG_CLASS: return readClass(input, type, serializer); case TYPE_ID_JAVA_LANG_CLASS_HOLDER: return readClass(input, type, serializer); case TYPE_ID_BOOLEAN: return Boolean.valueOf(input.readBoolean()); case TYPE_ID_BYTE: return Byte.valueOf(input.readByte()); case TYPE_ID_CHAR: return Character.valueOf(input.readChar()); case TYPE_ID_DOUBLE: return Double.valueOf(input.readDouble()); case TYPE_ID_FLOAT: return Float.valueOf(input.readFloat()); case TYPE_ID_INT: return Integer.valueOf(input.readInt()); case TYPE_ID_LONG: return Long.valueOf(input.readLong()); case TYPE_ID_SHORT: return Short.valueOf(input.readShort()); case TYPE_ID_STRING: return readString(input, type, serializer); case TYPE_ID_STRING_COMPRESSED: return readCompressedString(input); case TYPE_ID_STRING_BYTES: return readString(input, type, serializer); case TYPE_ID_REFERENCE: return new ObjectID(input.readLong()); case TYPE_ID_ARRAY: return decodeArray(input); default: throw Assert.failure("Illegal type (" + type + ")"); } // unreachable }
private Object decodeArray(TCDataInput input) throws IOException, ClassNotFoundException { final int len = input.readInt(); if (len < 0) { return null; } final byte arrayType = input.readByte(); switch (arrayType) { case ARRAY_TYPE_PRIMITIVE: return decodePrimitiveArray(len, input); case ARRAY_TYPE_NON_PRIMITIVE: return decodeNonPrimitiveArray(len, input); default: throw Assert.failure("unknown array type: " + arrayType); } // unreachable }