@Override
        public void transfer(Pipe pipe, Input input, Output output)
                throws IOException
        {
            final int first = input.readFieldNumber(DerivativeSchema.this);
            if (first != ID_POJO)
                throw new ProtostuffException("order not preserved.");

            final Pipe.Schema<Object> pipeSchema = strategy.transferPojoId(
                    input, output, ID_POJO).getPipeSchema();

            if (output instanceof StatefulOutput)
            {
                // update using the derived schema.
                ((StatefulOutput) output).updateLast(pipeSchema, this);
            }

            Pipe.transferDirect(pipeSchema, pipe, input, output);
        }
This pipe schema delegates to another schema derived from the input.
protostuff-runtime/src/main/java/io/protostuff/runtime/DerivativeSchema.java