'Maps are encoded as a series of blocks.
Each block consists of a long count value,
followed by that many key/value pairs.
A block with count zero indicates the end of the map.
Each item is encoded per the map\'s value schema.
If a block\'s count is negative,
then the count is followed immediately by a long block size,
indicating the number of bytes in the block.
The actual count in this case
is the absolute value of the count written.'

def read_map(self, writers_schema, readers_schema, decoder):

    read_items = {}
    block_count = decoder.read_long()
    while (block_count != 0):
        if (block_count < 0):
            block_count = (- block_count)
            block_size = decoder.read_long()
        for i in range(block_count):
            key = decoder.read_utf8()
            read_items[key] = self.read_data(writers_schema.values, readers_schema.values, decoder)
        block_count = decoder.read_long()
    return read_items
