code: public Chunk<byte[], BytesReference> readChunk() throws IOException {
          while (true) {
              int ch = super.read();
              if (ch == -1) {
                  return null;
              }
              if (ch == InformationSeparator.US || ch == InformationSeparator.RS ||
                      ch == InformationSeparator.GS || ch == InformationSeparator.FS) {
                  final BytesReference bytesReference = ref.bytes();
                  Chunk<byte[], BytesReference> chunk = new Chunk<byte[], BytesReference>() {
                      @Override
                      public byte[] separator() {
                          return new byte[]{(byte) separator };
                      }
  
                      @Override
                      public BytesReference data() {
                          return bytesReference;
                      }
                  };
                  separator = (char) ch;
                  ref.reset();
                  return chunk;
              } else {
                  ref.write(ch);
              }
          }
      }
docs: Read next chunk. This is slow, it uses the {@code read()} method.
  @return the next chunk
  @throws IOException if chunk reading fails