class_docstr: Reader for Mat 5 mat files
  Adds the following attribute to base class
  
  uint16_codec - char codec to use for uint16 char arrays
      (defaults to system default codec)
  
  Uses variable reader that has the following stardard interface (see
  abstract class in ``miobase``::
  
     __init__(self, file_reader)
     read_header(self)
     array_from_header(self)
  
  and added interface::
  
     set_stream(self, stream)
     read_full_tag(self)
docstr: Read header, return header, next position
  
  Header has to define at least .name and .is_global
  
  Parameters
  ----------
  None
  
  Returns
  -------
  header : object
     object that can be passed to self.read_var_array, and that
     has attributes .name and .is_global
  next_position : int
     position in stream of next variable
docstr_tok: ["Read","header",",","return","header",",","next","position","Header","has","to","define","at","least",".name","and",".is_global","Parameters","--","--","--","--","--","None","Returns","--","--","--","-","header",":","object","object","that","can","be","passed","to","self.read_var_array",",","and","that","has","attributes",".name","and",".is_global","next_position",":","int","position","in","stream","of","next","variable"]
code: def read_var_header(self):
      """Read header, return header, next position
  
      Header has to define at least .name and .is_global
  
      Parameters
      ----------
      None
  
      Returns
      -------
      header : object
         object that can be passed to self.read_var_array, and that
         has attributes .name and .is_global
      next_position : int
         position in stream of next variable
      """
      mdtype, byte_count = self._file_reader.read_full_tag()
      if not byte_count > 0:
          raise ValueError("Did not read any bytes")
      next_pos = self.mat_stream.tell() + byte_count
      if mdtype == miCOMPRESSED:
          # Make new stream from compressed data
          stream = ZlibInputStream(self.mat_stream, byte_count)
          self._matrix_reader.set_stream(stream)
          check_stream_limit = self.verify_compressed_data_integrity
          mdtype, byte_count = self._matrix_reader.read_full_tag()
      else:
          check_stream_limit = False
          self._matrix_reader.set_stream(self.mat_stream)
      if not mdtype == miMATRIX:
          raise TypeError(
              "Expecting miMATRIX type here, got %d" % mdtype
          )
      header = self._matrix_reader.read_header(check_stream_limit)
      return header, next_pos
  
imports: import os
  import time
  import sys
  import zlib
  from io import BytesIO
  import warnings
  import numpy
  import scipy.sparse
  from .byteordercodes import native_code, swapped_code
  from .miobase import MatFileReader, docfiller, matdims, read_dtype, arr_to_chars, arr_dtype_number, MatWriteError, MatReadError, MatReadWarning
  from .mio5_utils import VarReader5
  from .mio5_params import MatlabObject, MatlabFunction, MDTYPES, NP_TO_MTYPES, NP_TO_MXTYPES, miCOMPRESSED, miMATRIX, miINT8, miUTF8, miUINT32, mxCELL_CLASS, mxSTRUCT_CLASS, mxOBJECT_CLASS, mxCHAR_CLASS, mxSPARSE_CLASS, mxDOUBLE_CLASS, mclass_info, mat_struct
  from .streams import ZlibInputStream
label_desc: Use image node_id 5 for calling the MatFile5Reader obj's underlying member method code with example usage: obj.read_var_header() and returns: header,  next_pos