def streamify(self, state, frame):
        """Prepare frame for output as a COBS-encoded stream."""

        # Get the encoding table
        enc_tab = self._tables[1][:]

        # Need the special un-trailed block length and code
        untrail_len, untrail_code = enc_tab.pop(0)

        # Set up a repository to receive the encoded blocks
        result = []

        # Break the frame into blocks
        blocks = frame.split('\0')

        # Now, walk the block list; done carefully because we need
        # look-ahead in some cases
        skip = False
        for i in range(len(blocks)):
            # Skip handled blocks
            if skip:
                skip = False
                continue

            blk = blocks[i]

            # Encode un-trailed blocks
            while len(blk) >= untrail_len - 1:
                result.append(untrail_code + blk[:untrail_len - 1])
                blk = blk[untrail_len - 1:]

            # Do we care about look-ahead?
            if (len(enc_tab) > 1 and i + 1 < len(blocks) and
                    blocks[i + 1] == '' and len(blk) <= 30):
                # Use the second encoder table
                tab = enc_tab[1]

                # Skip the following empty block
                skip = True
            else:
                # Use the regular encoder table
                tab = enc_tab[0]

            # Encode the block
            result.append(tab[len(blk) + 1] + blk)

        # Stitch together the result blocks
        return ''.join(result) + '\0'
Prepare frame for output as a COBS-encoded stream.