Example #1
0
 @Override
 public Object read(ByteBuffer buff) {
   int tag = buff.get();
   int typeId;
   if (tag <= TYPE_SERIALIZED_OBJECT) {
     typeId = tag;
   } else {
     switch (tag) {
       case TAG_BOOLEAN_TRUE:
         typeId = TYPE_BOOLEAN;
         break;
       case TAG_INTEGER_NEGATIVE:
       case TAG_INTEGER_FIXED:
         typeId = TYPE_INT;
         break;
       case TAG_LONG_NEGATIVE:
       case TAG_LONG_FIXED:
         typeId = TYPE_LONG;
         break;
       case TAG_BIG_INTEGER_0:
       case TAG_BIG_INTEGER_1:
       case TAG_BIG_INTEGER_SMALL:
         typeId = TYPE_BIG_INTEGER;
         break;
       case TAG_FLOAT_0:
       case TAG_FLOAT_1:
       case TAG_FLOAT_FIXED:
         typeId = TYPE_FLOAT;
         break;
       case TAG_DOUBLE_0:
       case TAG_DOUBLE_1:
       case TAG_DOUBLE_FIXED:
         typeId = TYPE_DOUBLE;
         break;
       case TAG_BIG_DECIMAL_0:
       case TAG_BIG_DECIMAL_1:
       case TAG_BIG_DECIMAL_SMALL:
       case TAG_BIG_DECIMAL_SMALL_SCALED:
         typeId = TYPE_BIG_DECIMAL;
         break;
       default:
         if (tag >= TAG_INTEGER_0_15 && tag <= TAG_INTEGER_0_15 + 15) {
           typeId = TYPE_INT;
         } else if (tag >= TAG_STRING_0_15 && tag <= TAG_STRING_0_15 + 15) {
           typeId = TYPE_STRING;
         } else if (tag >= TAG_LONG_0_7 && tag <= TAG_LONG_0_7 + 7) {
           typeId = TYPE_LONG;
         } else if (tag >= TAG_BYTE_ARRAY_0_15 && tag <= TAG_BYTE_ARRAY_0_15 + 15) {
           typeId = TYPE_ARRAY;
         } else {
           throw DataUtils.newIllegalStateException(
               DataUtils.ERROR_FILE_CORRUPT, "Unknown tag {0}", tag);
         }
     }
   }
   if (typeId != last.typeId) {
     last = newType(typeId);
   }
   return last.read(buff, tag);
 }