code: private void readNextBlock()
              throws IOException
      {
          lastReadInputCheckpoint = input.getCheckpoint();
  
          int control = input.read();
          if (control == -1) {
              throw new OrcCorruptionException(input.getOrcDataSourceId(), "Read past end of buffer RLE byte");
          }
  
          offset = 0;
  
          // if byte high bit is not set, this is a repetition; otherwise it is a literal sequence
          if ((control & 0x80) == 0) {
              length = control + MIN_REPEAT_SIZE;
  
              // read the repeated value
              int value = input.read();
              if (value == -1) {
                  throw new OrcCorruptionException(input.getOrcDataSourceId(), "Reading RLE byte got EOF");
              }
  
              // fill buffer with the value
              Arrays.fill(buffer, 0, length, (byte) value);
          }
          else {
              // length is 2's complement of byte
              length = 0x100 - control;
  
              // read the literals into the buffer
              input.readFully(buffer, 0, length);
          }
      }
docs: This is based on the Apache Hive ORC code