code: @SuppressWarnings("unchecked")  // Generic array assignment
    public void readFields(DataInput in) throws IOException {
      int card = WritableUtils.readVInt(in);
      if (splits == null || splits.length != card) {
        splits = new InputSplit[card];
      }
      Class<? extends InputSplit>[] cls = new Class[card];
      try {
        for (int i = 0; i < card; ++i) {
          cls[i] =
            Class.forName(Text.readString(in)).asSubclass(InputSplit.class);
        }
        for (int i = 0; i < card; ++i) {
          splits[i] = ReflectionUtils.newInstance(cls[i], null);
          splits[i].readFields(in);
        }
      } catch (ClassNotFoundException e) {
        throw (IOException)new IOException("Failed split init").initCause(e);
      }
    }
docs: {@inheritDoc}
  @throws IOException If the child InputSplit cannot be read, typically
  for faliing access checks.