docs: public static <T> int mergeDelimitedFrom(InputStream in, T message, Schema<T> schema,
              LinkedBuffer buffer) throws IOException
      {
          final int size = in.read();
          if (size == -1)
              throw ProtobufException.truncatedMessage();
  
          final byte[] buf = buffer.buffer;
  
          final int len = size < 0x80 ? size : CodedInput.readRawVarint32(in, size);
  
          if (len < 0)
              throw ProtobufException.negativeSize();
  
          if (len != 0)
          {
              // not an empty message
              if (len > buf.length)
              {
                  // size limit exceeded.
                  throw new ProtobufException("size limit exceeded. " +
                          len + " > " + buf.length);
              }
  
              IOUtil.fillBufferFrom(in, buf, 0, len);
              final ByteArrayInput input = new ByteArrayInput(buf, 0, len,
                      true);
              final GraphByteArrayInput graphInput = new GraphByteArrayInput(input);
              try
              {
                  schema.mergeFrom(graphInput, message);
              }
              catch (ArrayIndexOutOfBoundsException e)
              {
                  throw ProtobufException.truncatedMessage(e);
              }
              input.checkLastTagWas(0);
          }
  
          return len;
      }