docs: public static <T> int mergeDelimitedFrom(InputStream in, T message, Schema<T> schema)
              throws IOException
      {
          final int size = in.read();
          if (size == -1)
              throw ProtobufException.truncatedMessage();
  
          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 > CodedInput.DEFAULT_BUFFER_SIZE)
              {
                  // message too big
                  final CodedInput input = new CodedInput(new LimitedInputStream(in, len),
                          true);
                  final GraphCodedInput graphInput = new GraphCodedInput(input);
                  schema.mergeFrom(graphInput, message);
                  input.checkLastTagWas(0);
                  return len;
              }
  
              final byte[] buf = new byte[len];
              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;
      }