cdm/src/main/java/ucar/nc2/Variable.java
public Array read(ucar.ma2.Section section) throws java.io.IOException, ucar.ma2.InvalidRangeException {
    return (section == null) ? _read() : _read(Section.fill(section, shape));
  }
public Array read(ucar.ma2.Section section) throws java.io.IOException, ucar.ma2.InvalidRangeException {
    return (section == null) ? _read() : _read(Section.fill(section, shape));
  }
Read a section of the data for this Variable from the netcdf file and return a memory resident Array.
The Array has the same element type as the Variable, and the requested shape.
Note that this does not do rank reduction, so the returned Array has the same rank
as the Variable. Use Array.reduce() for rank reduction.
<p/>
If the Variable is a member of an array of Structures, this returns only the variable's data
in the first Structure, so that the Array shape is the same as the Variable.
To read the data in all structures, use ncfile.readSectionSpec().
<p/>
Note this only allows you to specify a subset of this variable.
If the variable is nested in a array of structures and you want to subset that, use
NetcdfFile.read(String sectionSpec, boolean flatten);

@param section list of Range specifying the section of data to read.
Must be null or same rank as variable.
If list is null, assume all data.
Each Range corresponds to a Dimension. If the Range object is null, it means use the entire dimension.
@return the requested data in a memory-resident Array
@throws IOException           if error
@throws InvalidRangeException if section is invalid