More...
Basic classes and global functions for IO and object persistency
See below for an overview of the classes in this module.
Review Status
- Reviewed By:
- UNKNOWN
- Date Reviewed:
- before2004/08/25
Synopsis
This module provides the basic IO functionality for the Casacore classes. There are two IO mechanisms:
-
Class AipsIO provides the object persistency mechanism. The templated global functions in AipsIOCarray.h form a little layer upon AipsIO. They provide the means to put or get a C-style array of any type.
-
Class ByteSinkSource and its ancestors provide a general IO mechanism.
Both use the underlying IO framework which define where and how the data are written. The how-part is defined by classes derived from TypeIO as shown in the UML diagram. There are three such classes:
-
CanonicalIO reads/writes data in canonical (machine-independent) format. This should be used when data are meant to be exportable. It uses the conversion functions in class
CanonicalConversion .
-
RawIO reads/writes data in native (machine-dependent) format. This can be used when data are not exported.
-
ConversionIO reads/writes in an external format as defined at construction time. This can be used when the external format can be one of several (e.g. VAX or IBM for a WSRT archive tape). In this way the format has to be defined only once and thereafter is it handled correctly by the polymorphism mechanism.
The where-part is defined by classes derived from ByteIO as shown in the UML diagram. There are a few such classes:
-
RegularFileIO uses a regular file to hold the data. Internally it uses FilebufIO (see below). It can handle files > 2 GB.
-
FilebufIO does the IO in a buffered way similar to the
stdio
system. However, it does not use stdio because that gave problems when doing concurrent access from multiple processes. It can handle files > 2 GB.
-
FiledesIO uses the UNIX IO-functions like
open, read
to do IO directly. It does not use an internal buffer. Instead it always does physical IO. It is meant for IO operations where large chunks of a file are accessed and for IO on sockets, pipes, etc.. It can handle files > 2 GB.
-
StreamIO for IO on a socket.
-
TapeIO for IO on a tape device.
-
MemoryIO uses a (possibly expandable) buffer in memory to hold the data.
-
MMapIO uses memory-mapped IO. Be careful to use this on 32-bit machines, because its address space is too small to handle a file of a few GBytes.
-
MFFileIO uses a virtual file in a MultiFileBase container file. The derived classes MultiFile and MultiHDF5 combine multiple files in a single physical file to reduce the number of files used by CTDS (the Casacore table data system).
The IO framework is easily expandable. One can for instance think of a class AsciiIO
derived from TypeIO
to hold data in ASCII format. A class RemoteTapeIO
could be developed for IO on a tape device on another node.