private static void readStream()

in serialization/src/main/java/com/twitter/serial/util/SerializationUtils.java [273:351]


    private static void readStream(@NotNull SerializerInput input, boolean singleObject) throws IOException {
        int objectNesting = 0;
        byte type;
        if (singleObject) {
            if (readNullIndicator(input)) {
                return;
            }
            type = input.peekType();
            if (type != SerializerDefs.TYPE_START_OBJECT && type != SerializerDefs.TYPE_START_OBJECT_DEBUG) {
                throw new SerializationException(
                        "Method skipObject can only be used to skip Objects in deserialization," +
                                " expected start object header but found " + SerializerDefs.getTypeName(type));
            }
        }
        while ((type = input.peekType()) != SerializerDefs.TYPE_EOF) {
            switch (type) {
                case SerializerDefs.TYPE_BYTE: {
                    input.readByte();
                    break;
                }
                case SerializerDefs.TYPE_INT: {
                    input.readInt();
                    break;
                }
                case SerializerDefs.TYPE_LONG: {
                    input.readLong();
                    break;
                }
                case SerializerDefs.TYPE_FLOAT: {
                    input.readFloat();
                    break;
                }
                case SerializerDefs.TYPE_DOUBLE: {
                    input.readDouble();
                    break;
                }
                case SerializerDefs.TYPE_BOOLEAN: {
                    input.readBoolean();
                    break;
                }
                case SerializerDefs.TYPE_NULL: {
                    input.readNull();
                    break;
                }
                case SerializerDefs.TYPE_STRING_ASCII:
                case SerializerDefs.TYPE_STRING_UTF8: {
                    input.readString();
                    break;
                }
                case SerializerDefs.TYPE_BYTE_ARRAY: {
                    input.readByteArray();
                    break;
                }
                case SerializerDefs.TYPE_START_OBJECT:
                case SerializerDefs.TYPE_START_OBJECT_DEBUG: {
                    input.readObjectStart();
                    ++objectNesting;
                    break;
                }
                case SerializerDefs.TYPE_END_OBJECT: {
                    --objectNesting;
                    input.readObjectEnd();
                    if (singleObject && objectNesting == 0) {
                        return;
                    }
                    if (objectNesting < 0) {
                        throw new SerializationException("Object end with no matching object start.");
                    }
                    break;
                }
                default: {
                    throw new SerializationException("Unknown type: " + SerializerDefs.getTypeName(type) + '.');
                }
            }
        }
        if (objectNesting > 0) {
            throw new SerializationException("Object start with no matching object end.");
        }
    }