code: private void parseQueryRows(boolean lastChunk) {
          while (true) {
              int openBracketPos = findNextChar(responseContent, '{');
              if (isEmptySection(openBracketPos) || (lastChunk && openBracketPos < 0)) {
                  sectionDone();
                  queryParsingState = transitionToNextToken(lastChunk);
                  queryRowClosingPositionProcessor = null;
                  queryRowClosingProcessorIndex = 0;
                  break;
              }
  
              if (queryRowClosingPositionProcessor == null) {
                  queryRowClosingPositionProcessor = new ClosingPositionBufProcessor('{', '}', true);
                  queryRowClosingProcessorIndex = responseContent.readerIndex();
              }
  
              int lengthToScan = responseContent.writerIndex() - this.queryRowClosingProcessorIndex;
              int closeBracketPos = responseContent.forEachByte(queryRowClosingProcessorIndex,
                  lengthToScan, queryRowClosingPositionProcessor);
  
              if (closeBracketPos == -1) {
                  queryRowClosingProcessorIndex = responseContent.writerIndex();
                  break;
              }
  
              queryRowClosingPositionProcessor = null;
              queryRowClosingProcessorIndex = 0;
              int length = closeBracketPos - openBracketPos - responseContent.readerIndex() + 1;
              responseContent.skipBytes(openBracketPos);
              ByteBuf resultSlice = responseContent.readSlice(length);
              queryRowObservable.onNext(resultSlice.copy());
              responseContent.discardSomeReadBytes();
          }
      }
docs: Parses the query rows from the content stream as long as there is data to be found.