Сообщить об ошибке.

Интерфейсы IncrementalEncoder() и IncrementalDecoder() в Python

Инкрементальное кодирование и декодирование в Python

Классы codecs.IncrementalEncoder() и codecs.IncrementalDecoder() обеспечивают базовый интерфейс для инкрементного кодирования и декодирования. Кодирование/декодирование входных данных выполняется не одним вызовом функции кодировщика без сохранения состояния, а несколькими вызовами метода encode()/decode() инкрементного кодировщика. Инкрементный кодировщик/декодировщик отслеживает процесс кодирования/декодирования во время вызовов метода.

Объединенный вывод вызовов метода encode()/decode() такой же, как если бы все одиночные вводы(входы) были объединены в один, и этот ввод(вход) был закодирован/декодирован с помощью кодировщика/декодировщика без сохранения состояния.

Содержание:


Объект IncrementalEncoder.

Класс codecs.IncrementalEncoder() используется для кодирования ввода в несколько шагов.

class IncrementalEncoder(object):

    def __init__(self, errors='strict'):
        self.errors = errors
        self.buffer = ""

    def encode(self, input, final=False):
        raise NotImplementedError

    def reset(self):
        pass
    def getstate(self):
        return 0

    def setstate(self, state):
        pass

codecs.IncrementalEncoder(errors='strict'):

Класс codecs.IncrementalEncoder() определяет конструктор для экземпляра IncrementalEncoder. Все инкрементные кодировщики должны предоставлять этот интерфейс конструктора. Они могут добавлять дополнительные ключевые аргументы, но только те, которые определены здесь, используются реестром кодеков Python.

Может реализовывать различные схемы обработки ошибок путем предоставления именованного аргумента errors.

Аргумент errors будет присвоен атрибуту с тем же именем. Наличие этого атрибута позволяет переключаться между различными стратегиями обработки ошибок в течение всего времени существования объекта IncrementalEncoder .

Класс codecs.IncrementalEncoder() определяет следующие методы, которые должен определять каждый инкрементальный кодировщик, чтобы быть совместимым с реестром кодеков Python.

encode(object[, final]):

Метод encode() кодирует объект object, принимая во внимание текущее состояние encoder и возвращает полученный кодированный объект. Если это последний вызов encode(), то final должен быть True (по умолчанию False).

reset():

Метод reset() сбрасывает encode до исходного состояния. Вывод отбрасывается: вызов encode(object, final=True), передавая при необходимости пустой байт или текстовую строку, сбрасывает encoder и получает вывод.

getstate():

Метод getstate() возвращает текущее состояние encoder, которое должно быть целым числом. Реализация должна убедиться, что 0 это наиболее распространенное состояние. Состояния, которые являются более сложными, чем целые числа, могут быть преобразованы в целое число путем marshaling/pickling состояния и кодирования байтов результирующей строки в целое число.

setstate(state):

Метод setstate() устанавливает состояние кодировщика в state. Состояние state должно быть состоянием кодировщика, которое возвращает методом getstate().

Объект IncrementalDecoder.

Класс codecs.IncrementalDecoder() используется для декодирования входа в нескольких этапах.

class IncrementalDecoder(object):

    def __init__(self, errors='strict'):
        self.errors = errors

    def decode(self, input, final=False):
        raise NotImplementedError

    def reset(self):
        pass

    def getstate(self):
        return (b"", 0)

    def setstate(self, state):
        pass

codecs.IncrementalDecoder(errors='strict'):

Класс codecs.IncrementalDecoder() определяет конструктор для экземпляра IncrementalDecoder. Все инкрементные декодировщики должны предоставлять этот интерфейс конструктора. Они могут добавлять дополнительные ключевые аргументы, но только те, которые определены здесь, используются реестром кодеков Python.

Может реализовывать различные схемы обработки ошибок путем предоставления именованного аргумента errors.

Аргумент errors будет присвоен атрибуту с тем же именем. Наличие этого атрибута позволяет переключаться между различными стратегиями обработки ошибок в течение всего времени существования объекта IncrementalDecoder .

Класс codecs.IncrementalDecoder() определяет следующие методы, которые должен определять каждый инкрементальный декодер, чтобы быть совместимым с реестром кодеков Python.

decode(object[, final]):

Метод decode() декодирует объект, принимая во внимание текущее состояние decoder и возвращает полученный декодированный объект. Если это последний вызов decode(), то final должен быть True (по умолчанию False). Если final - True, decoder должен полностью декодировать ввод и очистить все буферы. Если это невозможно, например из-за неполных байтовых последовательностей в конце ввода, он должен инициировать обработку ошибок, как в случае без сохранения состояния что может вызвать исключение.

reset():

Метод reset() сбрасывает decoder до исходного состояния.

getstate():

Метод getstate() возвращает текущее состояние decoder. Это должен быть кортеж с двумя элементами, первый из которых должен быть буфером, содержащим еще не закодированный входной сигнал. Второй должен быть целым числом и может содержать дополнительную информацию о состоянии. Реализация должна убедиться, что 0 является наиболее распространенной дополнительной информацией о состоянии. Если эта дополнительная информация о состоянии равна 0, то decoder должен иметь возможность установить в состояние, которое не имеет буферизованного входного сигнала и 0 в качестве дополнительной информации о состоянии, так что подача ранее буферизованного входного сигнала в decoder возвращает его в предыдущее состояние без получения каких-либо выходных данных. Дополнительная информация о состоянии, более сложная, чем целые числа, может быть преобразована в целое число путем marshaling/pickling информации и кодирования байтов результирующей строки в целое число.

setstate(state):

Метод setstate() устанавливает состояние decoder в state. Состояние state должно быть состоянием decoder, которое возвращает методом getstate().