mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-11 16:01:00 +08:00
* Merge examples repo into library * Change grepTest to be more fault-tolerant * Update examples macro file * Exclude all Fortran examples from doxygen
261 lines
8.6 KiB
Java
261 lines
8.6 KiB
Java
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
* Copyright by The HDF Group. *
|
|
* All rights reserved. *
|
|
* *
|
|
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
|
* terms governing use, modification, and redistribution, is contained in *
|
|
* the COPYING file, which can be found at the root of the source code *
|
|
* distribution tree, or in https://www.hdfgroup.org/licenses. *
|
|
* If you do not have access to either file, you may request a copy from *
|
|
* help@hdfgroup.org. *
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
/************************************************************
|
|
This example shows how to read and write integer datatypes
|
|
to an attribute. The program first writes integers to an
|
|
attribute with a dataspace of DIM0xDIM1, then closes the
|
|
file. Next, it reopens the file, reads back the data, and
|
|
outputs it to the screen.
|
|
************************************************************/
|
|
|
|
import java.text.DecimalFormat;
|
|
|
|
import hdf.hdf5lib.H5;
|
|
import hdf.hdf5lib.HDF5Constants;
|
|
|
|
public class H5Ex_T_IntegerAttribute {
|
|
private static String FILENAME = "H5Ex_T_IntegerAttribute.h5";
|
|
private static String DATASETNAME = "DS1";
|
|
private static String ATTRIBUTENAME = "A1";
|
|
private static final int DIM0 = 4;
|
|
private static final int DIM1 = 7;
|
|
private static final int RANK = 2;
|
|
|
|
private static void CreateDataset()
|
|
{
|
|
long file_id = HDF5Constants.H5I_INVALID_HID;
|
|
long dataspace_id = HDF5Constants.H5I_INVALID_HID;
|
|
long dataset_id = HDF5Constants.H5I_INVALID_HID;
|
|
long attribute_id = HDF5Constants.H5I_INVALID_HID;
|
|
long[] dims = {DIM0, DIM1};
|
|
int[][] dset_data = new int[DIM0][DIM1];
|
|
|
|
// Initialize data.
|
|
for (int indx = 0; indx < DIM0; indx++)
|
|
for (int jndx = 0; jndx < DIM1; jndx++) {
|
|
dset_data[indx][jndx] = indx * jndx - jndx;
|
|
}
|
|
|
|
// Create a new file using default properties.
|
|
try {
|
|
file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
|
|
HDF5Constants.H5P_DEFAULT);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Create dataset with a scalar dataspace.
|
|
try {
|
|
dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
|
|
if (dataspace_id >= 0) {
|
|
dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
|
|
HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
|
|
HDF5Constants.H5P_DEFAULT);
|
|
H5.H5Sclose(dataspace_id);
|
|
dataspace_id = HDF5Constants.H5I_INVALID_HID;
|
|
}
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Create dataspace. Setting maximum size to NULL sets the maximum
|
|
// size to be the current size.
|
|
try {
|
|
dataspace_id = H5.H5Screate_simple(RANK, dims, null);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Create the attribute and write the array data to it.
|
|
try {
|
|
if ((dataset_id >= 0) && (dataspace_id >= 0))
|
|
attribute_id =
|
|
H5.H5Acreate(dataset_id, ATTRIBUTENAME, HDF5Constants.H5T_STD_I64BE, dataspace_id,
|
|
HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Write the dataset.
|
|
try {
|
|
if (attribute_id >= 0)
|
|
H5.H5Awrite(attribute_id, HDF5Constants.H5T_NATIVE_INT, dset_data);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// End access to the dataset and release resources used by it.
|
|
try {
|
|
if (attribute_id >= 0)
|
|
H5.H5Aclose(attribute_id);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
try {
|
|
if (dataset_id >= 0)
|
|
H5.H5Dclose(dataset_id);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Terminate access to the data space.
|
|
try {
|
|
if (dataspace_id >= 0)
|
|
H5.H5Sclose(dataspace_id);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Close the file.
|
|
try {
|
|
if (file_id >= 0)
|
|
H5.H5Fclose(file_id);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private static void ReadDataset()
|
|
{
|
|
long file_id = HDF5Constants.H5I_INVALID_HID;
|
|
long dataspace_id = HDF5Constants.H5I_INVALID_HID;
|
|
long dataset_id = HDF5Constants.H5I_INVALID_HID;
|
|
long attribute_id = HDF5Constants.H5I_INVALID_HID;
|
|
long[] dims = {DIM0, DIM1};
|
|
int[][] dset_data;
|
|
|
|
// Open an existing file.
|
|
try {
|
|
file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Open an existing dataset.
|
|
try {
|
|
if (file_id >= 0)
|
|
dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
try {
|
|
if (dataset_id >= 0)
|
|
attribute_id = H5.H5Aopen_by_name(dataset_id, ".", ATTRIBUTENAME, HDF5Constants.H5P_DEFAULT,
|
|
HDF5Constants.H5P_DEFAULT);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Get dataspace and allocate memory for read buffer.
|
|
try {
|
|
if (attribute_id >= 0)
|
|
dataspace_id = H5.H5Aget_space(attribute_id);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
try {
|
|
if (dataspace_id >= 0)
|
|
H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Allocate array of pointers to two-dimensional arrays (the
|
|
// elements of the dataset.
|
|
dset_data = new int[(int)dims[0]][(int)(dims[1])];
|
|
|
|
// Read data.
|
|
try {
|
|
if (attribute_id >= 0)
|
|
H5.H5Aread(attribute_id, HDF5Constants.H5T_NATIVE_INT, dset_data);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Output the data to the screen.
|
|
DecimalFormat df = new DecimalFormat("#,##0");
|
|
System.out.println(ATTRIBUTENAME + ":");
|
|
for (int indx = 0; indx < dims[0]; indx++) {
|
|
System.out.print(" [");
|
|
for (int jndx = 0; jndx < dims[1]; jndx++) {
|
|
System.out.print(" " + df.format(dset_data[indx][jndx]));
|
|
}
|
|
System.out.println("]");
|
|
}
|
|
System.out.println();
|
|
|
|
// End access to the dataset and release resources used by it.
|
|
try {
|
|
if (attribute_id >= 0)
|
|
H5.H5Aclose(attribute_id);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
try {
|
|
if (dataset_id >= 0)
|
|
H5.H5Dclose(dataset_id);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Terminate access to the data space.
|
|
try {
|
|
if (dataspace_id >= 0)
|
|
H5.H5Sclose(dataspace_id);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Close the file.
|
|
try {
|
|
if (file_id >= 0)
|
|
H5.H5Fclose(file_id);
|
|
}
|
|
catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args)
|
|
{
|
|
H5Ex_T_IntegerAttribute.CreateDataset();
|
|
// Now we begin the read section of this example. Here we assume
|
|
// the dataset and array have the same name and rank, but can have
|
|
// any size. Therefore we must allocate a new array to read in
|
|
// data using malloc().
|
|
H5Ex_T_IntegerAttribute.ReadDataset();
|
|
}
|
|
}
|