ucar.nc2.write.Nc4ChunkingStrategy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cdm Show documentation
Show all versions of cdm Show documentation
The NetCDF-Java Library is a Java interface to NetCDF files,
as well as to many other types of scientific data formats.
The newest version!
package ucar.nc2.write;
import net.jcip.annotations.Immutable;
import ucar.ma2.Section;
import ucar.nc2.Attribute;
import ucar.nc2.Dimension;
import ucar.nc2.FileWriter2;
import ucar.nc2.Variable;
import ucar.nc2.constants.CDM;
import java.util.List;
/**
* Abstract superclass for netcdf-4 chunking strategy.
* @author caron
* @since 11/14/12
*/
@Immutable
public abstract class Nc4ChunkingStrategy implements Nc4Chunking {
/**
* @param type Strategy type
* @param deflateLevel 0 corresponds to no compression and 9 to maximum compression,
* @param shuffle true to turn shuffling on which may improve compression. This option is ignored unless a non-zero deflation level is specified.
* @return Nc4Chunking implementation
*/
public static Nc4Chunking factory(Strategy type, int deflateLevel, boolean shuffle) {
switch (type) {
case standard: return new Nc4ChunkingDefault(deflateLevel, shuffle);
case grib: return new Nc4ChunkingStrategyGrib(deflateLevel, shuffle);
case none: return new Nc4ChunkingStrategyNone();
}
throw new IllegalArgumentException("Illegal Nc4Chunking.Standard " + type);
}
////////////////////////////////////////////////////
private final int deflateLevel;
private final boolean shuffle;
////////////////////////
protected Nc4ChunkingStrategy(int deflateLevel, boolean shuffle) {
this.deflateLevel = deflateLevel;
this.shuffle = shuffle;
}
@Override
public int getDeflateLevel(Variable v) {
return deflateLevel;
}
@Override
public boolean isShuffle(Variable v) {
return shuffle;
}
protected Attribute getChunkAttribute(Variable v) {
Attribute att = v.findAttribute(CDM.CHUNK_SIZES);
if (att != null && att.getDataType().isIntegral() && att.getLength() == v.getRank())
return att;
return null;
}
protected int[] computeChunkingFromAttribute(Variable v) {
Attribute att = getChunkAttribute(v); // use CHUNK_SIZES attribute if it exists
if (att != null) {
int[] result = new int[v.getRank()];
for (int i = 0; i < v.getRank(); i++)
result[i] = att.getNumericValue(i).intValue();
return result;
}
return null;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy