'Load the data and meta info stored in *filename*
Different arguments are allowed depending on the type of file.
For HDF5 files:
*writable* (bool) if True, then any modifications to data in the array will be stored to disk.
*readAllData* (bool) if True, then all data in the array is immediately read from disk
and the file is closed (this is the default for files < 500MB). Otherwise, the file will
be left open and data will be read only as requested (this is
the default for files >= 500MB).'

def readFile(self, filename, **kwargs):

    with open(filename, 'rb') as fd:
        magic = fd.read(8)
        if (magic == '\x89HDF\r\n\x1a\n'):
            fd.close()
            self._readHDF5(filename, **kwargs)
            self._isHDF = True
        else:
            fd.seek(0)
            meta = MetaArray._readMeta(fd)
            if (not kwargs.get('readAllData', True)):
                self._data = np.empty(meta['shape'], dtype=meta['type'])
            if ('version' in meta):
                ver = meta['version']
            else:
                ver = 1
            rFuncName = ('_readData%s' % str(ver))
            if (not hasattr(MetaArray, rFuncName)):
                raise Exception(("This    MetaArray    library    does    not    support    array    version    '%s'" % ver))
            rFunc = getattr(self, rFuncName)
            rFunc(fd, meta, **kwargs)
            self._isHDF = False
