JCDF is a pure java library capable of reading files in the Common Data Format defined by NASA. It runs within the J2SE1.5 (or later), but other than that has no dependencies, neither the official CDF C library nor any other java class libraries.


The classes are provided with comprehensive javadocs. Start reading at the CdfContent class for high-level access to CDF data and metadata, or CdfReader for low-level access to the CDF internal records.

Comparison with the official CDF library

JCDF is a completely separate implementation from the Java interface to the official CDF library, which uses native code via JNI. It was written mainly with reference to the CDF Internal Format Description document (v3.4). Minor updates at version JCDF 1.1 are believed to bring it into line with CDF v3.6.

The main benefit of using JCDF, and the reason for developing it, is that it's pure java, so it can be deployed using only the JCDF jar file. There is no need to install the system-dependent official CDF library.

The API is very different from that of the official CDF library. JCDF gives you a simple view of the CDF file, in terms of its global attributes, variable attributes and variables. This is fairly easy to use, but may or may not suit your purposes. It's also possible to get a low-level view of the CDF file as a sequence of CDF records.

JCDF offers no capabilities for writing or editing CDF files, it only reads them.

Implementation Notes

JCDF is based on NIO mapped ByteBuffers, it's expected to be reasonably fast, but I haven't done any benchmarking.

Use of mapped buffers leads to efficient serial and random I/O, but does have some associated problems concerning release of allocated resources. For reasons that are quite complicated, it is hard to release mapped buffers after use, which means that for instance files you have read using JCDF may be hard to delete, and that reading large files may leak significant amounts of virtual memory. There are some more or less nasty ways to work round this in user code or in the library. If these issues cause practical problems for library users, you are encouraged to contact me by email or open a github issue.

Implementation Status

Support for the CDF format is almost, but not totally, complete. In particular:


The library comes with a couple of simple utilities for examining CDF files:

displays the metadata and data from a CDF file, along the lines of the cdfdump command in the official CDF distribution. If the -data flag is supplied, record data as well as metadata is shown. See CdfList examples.
displays a dump of the sequence of low-level CDF records found in the CDF file, along the lines of the cdfirsdump command in the official CDF distribution. If the -fields flag is supplied, field information from each record is shown. If the -html flag is supplied, the output is in HTML with files offsets displayed as hyperlinks, which is nice for chasing pointers. See CdfDump examples.


The source code is hosted on github at https://github.com/mbtaylor/jcdf. It comes with a makefile that can be used to build the jar file, javadocs, and this documentation, and to run some tests.

Pre-built copies of the jar file and documentation for the current version (v1.2-4) can be found here:

Previous versions may be available at https://www.star.bristol.ac.uk/mbt/releases/jcdf/.


Version 0.1 (28 Jun 2013)
Initial release. Tested, documented and believed working, though could use some more testing and perhaps functionality related to time-related DataTypes. Support for some time types not complete.
Version 1.0 (13 Aug 2013)
Version 1.1 (23 Apr 2015)
Version 1.2 (9 Sep 2015)
Version 1.2-1 (25 Sep 2015)
Version 1.2-2 (4 Jan 2017)
Version 1.2-3 (16 Nov 2017)
Version 1.2-4 (15 Dec 2021)


This software was written by Mark Taylor at the University of Bristol at the request of, and funded by, the science archive group at ESA's European Space Astronomy Centre (ESAC).

It is used within TOPCAT/STILTS/STIL to enable access to CDF tables alongside other tabular data formats by that software. It is believed to be in some use also at ESAC and elsewhere. If anybody out there is using it and is willing to be listed here, let me know.

It is licenced under the LGPL, though if you need a different licence I can probably fix it.

My thanks to several people who have helped with development and testing, including Christophe Arviset, Robert Candey, Michael Liu, Jeremy Faden and Bogdan Nicula.

Bugs, questions, feedback, enhancement requests welcome to m.b.taylor@bristol.ac.uk.

Mark Taylor -- Astrophysics Group, School of Physics, University of Bristol