We try to avoid StringTokenizer.  I would just parse the line by hand.  And even then, we don't actually need to decode up into String data to parse this, its simple enough to load the entire todo-list into memory as a byte[] and use RawParseUtils to scan through the byte[] and process that into an in-memory representation:

  static enum Operation {
    PICK;  // later add SQUASH, EDIT, etc.
  }

  static class Step {
    Operation operation;
    ObjectId commit;
    byte[] shortMessage;
  }

  List<Step> todo;

  List<Step> loadSteps() {
    byte[] buf = IO.readFully(new File(rebaseDir, "git-rebase-todo"));
    int ptr = 0;
    ArrayList<Step> r = new ArrayList<Step>();
    while (ptr < buf.length) {
      ...
    }
    return r;
  }