def _open(self, name=None, fileobj=None, mymap=None, block=None):
        """
        The _open function takes some form of file identifier and creates
        an :py:class:`CpioFile` instance from it.

        :param :py:class:`str` name: a file name
        :param :py:class:`file` fileobj: if given, this overrides *name*
        :param :py:class:`mmap.mmap` mymap: if given, this overrides *fileobj*
        :param :py:class:`bytes` block: file contents in a block of memory, (if given, this overrides *mymap*)

        The file to be used can be specified in any of four different
        forms, (in reverse precedence):

        #. a file name
        #. :py:class:`file` object
        #. :py:mod:`mmap.mmap`, or
        #. a block of memory
        """

        if block is not None:
            if not name:
                name = '<unknown>'

            self.unpack_from(block)

            if fileobj:
                fileobj.close()

            return self

        if mymap is not None:
            block = mymap

        elif fileobj:
            try:
                mymap = mmap.mmap(fileobj.fileno(), 0,
                                  mmap.MAP_SHARED, mmap.PROT_READ)

            # pylint: disable=W0702
            except:
                mymap = 0
                block = fileobj.read()

        elif name:
            fileobj = io.open(os.path.normpath(os.path.expanduser(name)), 'rb')

        else:
            assert False

        return self._open(name=name,
                         fileobj=fileobj,
                         mymap=mymap,
                         block=block)