cdm/src/main/java/ucar/nc2/NetcdfFile.java
protected Array readData(ucar.nc2.Variable v, Section ranges) throws IOException, InvalidRangeException {
    long start = 0;
    if (showRequest) {
      log.info("Data request for variable: {} section {}...", v.getFullName(), ranges);
      start = System.currentTimeMillis();
    }

    /* if (unlocked) {
      String info = cache.getInfo(this);
      throw new IllegalStateException("File is unlocked - cannot use\n" + info);
    } */

    if (spi == null) {
      throw new IOException("spi is null, perhaps file has been closed. Trying to read variable " + v.getFullName());
    }
    Array result = spi.readData(v, ranges);

    if (showRequest) {
      long took = System.currentTimeMillis() - start;
      log.info(" ...took= {} msecs", took);
    }
    return result;
  }
protected Array readData(ucar.nc2.Variable v, Section ranges) throws IOException, InvalidRangeException {
    long start = 0;
    if (showRequest) {
      log.info("Data request for variable: {} section {}...", v.getFullName(), ranges);
      start = System.currentTimeMillis();
    }

    /* if (unlocked) {
      String info = cache.getInfo(this);
      throw new IllegalStateException("File is unlocked - cannot use\n" + info);
    } */

    if (spi == null) {
      throw new IOException("spi is null, perhaps file has been closed. Trying to read variable " + v.getFullName());
    }
    Array result = spi.readData(v, ranges);

    if (showRequest) {
      long took = System.currentTimeMillis() - start;
      log.info(" ...took= {} msecs", took);
    }
    return result;
  }
/*
Do not call this directly, use Variable.read() !!
Ranges must be filled (no nulls)