code: private ClassInfo parseClassInfo() throws Exception {
          String className = acceptString(input.readByte());
          Class<?> type = SerTypeMapper.decodeType(className, settings, overrideBasePackage, null);
          int propertyCount = acceptArray(input.readByte());
          if (propertyCount < 0) {
              throw new IllegalArgumentException("Invalid binary data: Expected array with 0 to many elements, but was: " + propertyCount);
          }
  
          MetaProperty<?>[] metaProperties = new MetaProperty<?>[propertyCount];
          if (ImmutableBean.class.isAssignableFrom(type)) {
              SerDeserializer deser = settings.getDeserializers().findDeserializer(type);
              MetaBean metaBean = deser.findMetaBean(type);
              for (int i = 0; i < propertyCount; i++) {
                  String propertyName = acceptString(input.readByte());
                  metaProperties[i] = deser.findMetaProperty(type, metaBean, propertyName);
              }
          } else if (propertyCount != 0) {
              throw new IllegalArgumentException("Invalid binary data: Found non immutable bean class that has meta properties defined: " + type.getName() + ", " + propertyCount + " properties");
          }
          return new ClassInfo(type, metaProperties);
      }
docs: parses the class information