code: public void transfer(TransferResult tr) {
      this.transferResult = tr;
      this.transferResult.setTransfer(this);
      long transferStartAt = System.currentTimeMillis();
      try {
        prepare.prepare(this);
      } catch (Exception e) {
        // 预导入发生位置错误，错误信息已经记录在tr了
        return;
      }
      for (final TransferListener listener : listeners) {
        listener.onStart(tr);
      }
      while (read()) {
        long transferItemStart = System.currentTimeMillis();
        index++;
        beforeImportItem();
        if (!isDataValid()) continue;
        int errors = tr.errors();
        // 实体转换开始
        for (final TransferListener listener : listeners) {
          listener.onItemStart(tr);
        }
        // 如果转换前已经存在错误,则不进行转换
        if (tr.errors() > errors) continue;
        // 进行转换
        transferItem();
        // 实体转换结束
        for (final TransferListener listener : listeners) {
          listener.onItemFinish(tr);
        }
        // 如果导入过程中没有错误，将成功记录数增一
        if (tr.errors() == errors) this.success++;
        else this.fail++;
  
        if (logger.isDebugEnabled()) {
          logger.debug("importer item:{} take time: {}", getTranferIndex(),
              (System.currentTimeMillis() - transferItemStart));
        }
      }
      for (final TransferListener listener : listeners) {
        listener.onFinish(tr);
      }
      reader.close();
      logger.debug("importer elapse: {}", (System.currentTimeMillis() - transferStartAt));
    }
docs: {@inheritDoc} 进行转换