code: public List<String> fetch(int offset, int limit) {
          E.illegalArgumentIf(offset < 0, "offset must not be negative number");
          E.illegalArgumentIf(offset >= lines(), "offset is out of range: " + offset);
          E.illegalArgumentIf(limit < 1, "limit must be at least 1");
          BufferedReader reader = IO.buffered(IO.reader(file));
          try {
              for (int i = 0; i < offset; ++i) {
                  if (null == reader.readLine()) {
                      break;
                  }
              }
          } catch (IOException e) {
              throw E.ioException(e);
          }
          List<String> lines = new ArrayList<>();
          try {
              for (int i = 0; i < limit; ++i) {
                  String line = reader.readLine();
                  if (null == line) {
                      break;
                  }
                  lines.add(line);
              }
          } catch (IOException e) {
              throw E.ioException(e);
          }
          return lines;
      }
docs: Returns a number of lines specified by start position `offset` and `limit`.
  
  @param offset
  the start line number (`0` based)
  @param limit
  the number of lines to be returned.
  @return a number of lines as specified.