Указатель на элемент массива является действительно итератором в массив.
, Как Вы говорите в Java, итератор имеет больше знания базового контейнера, чем в C++. Итераторы C++ являются общими, и , пара из итераторов может обозначить любой диапазон: это может быть поддиапазоном контейнера, диапазоном по нескольким контейнерам (см. http://www.justsoftwaresolutions.co.uk/articles/pair_iterators.pdf или http://www.boost.org/doc/libs/1_36_0/libs/iterator/doc/zip_iterator.html ), или даже диапазон чисел (см. http://www.boost.org/doc/libs/1_36_0/libs/iterator/doc/counting_iterator.html )
категории итератора определяют то, что Вы можете и не можете сделать с данным итератором.
Это дополнение к ответу MizardX, дающее некоторые объяснения и предысторию.
См. http://www.chiramattel.com/george/blog/2007/09 /09/deflatestream-block-length-does-not-match.html
Согласно RFC 1950 поток zlib, созданный по умолчанию, состоит из:
C # DeflateStream
работает на ( как вы уже догадались) поток спуска. Код MizardX сообщает модулю zlib, что данные представляют собой необработанный поток дефлятирования.
Наблюдения: (1) Можно надеяться, что метод "дефляции" C #, производящий более длинную строку, происходит только с коротким вводом (2) Использование необработанного потока дефлятирования без контрольная сумма Адлер-32? Немного рискованно,
Обновляет
сообщение об ошибке Длина блока не совпадает с его дополнением
Если вы пытаетесь раздуть сжатые данные с помощью C # DeflateStream
и вы получить это сообщение, то вполне возможно, что вы даете ему поток zlib, а не поток deflate.
См. Как вы используете DeflateStream для части файла?
Также скопируйте / вставьте сообщение об ошибке в поиск Google, и вы получите множество обращений (в том числе и в начале этого ответа) говоря примерно то же самое.
Java Deflater
... используемый «веб-сайтом» ... C # DeflateStream «довольно прост и протестирован против реализации Java». Какой из следующих возможных конструкторов Java Deflater используется веб-сайтом?
public Deflater (int level, boolean nowrap)
Создает новый компрессор, используя указанный уровень сжатия. Если 'nowrap' истинно, то поля заголовка ZLIB и контрольной суммы не будут использоваться для поддержки формата сжатия, используемого как в GZIP, так и в PKZIP.
public Deflater (int level)
Создает новый компрессор, используя указанный уровень сжатия. Сжатые данные будут сгенерированы в формате ZLIB.
public Deflater ()
Создает новый компрессор с уровнем сжатия по умолчанию. Сжатые данные будут созданы в формате ZLIB.
Однострочный дефлятер после отбрасывания 2-байтового заголовка zlib и 4-байтовой контрольной суммы: nowrap 'истинно, тогда поля заголовка ZLIB и контрольной суммы не будут использоваться для поддержки формата сжатия, используемого как в GZIP, так и в PKZIP.
public Deflater (int level)
Создает новый компрессор, используя указанный уровень сжатия . Сжатые данные будут сгенерированы в формате ZLIB.
public Deflater ()
Создает новый компрессор с уровнем сжатия по умолчанию. Сжатые данные будут созданы в формате ZLIB.
Однострочный дефлятер после отбрасывания 2-байтового заголовка zlib и 4-байтовой контрольной суммы: nowrap 'истинно, тогда поля заголовка ZLIB и контрольной суммы не будут использоваться для поддержки формата сжатия, используемого как в GZIP, так и в PKZIP.
public Deflater (int level)
Создает новый компрессор, используя указанный уровень сжатия . Сжатые данные будут сгенерированы в формате ZLIB.
public Deflater ()
Создает новый компрессор с уровнем сжатия по умолчанию. Сжатые данные будут созданы в формате ZLIB.
Однострочный дефлятер после отбрасывания 2-байтового заголовка zlib и 4-байтовой контрольной суммы:
public Deflater ()
Создает новый компрессор с уровнем сжатия по умолчанию. Сжатые данные будут созданы в формате ZLIB.
Однострочный дефлятер после отбрасывания 2-байтового заголовка zlib и 4-байтовой контрольной суммы:
public Deflater ()
Создает новый компрессор с уровнем сжатия по умолчанию. Сжатые данные будут созданы в формате ZLIB.
Однострочный дефлятер после отбрасывания 2-байтового заголовка zlib и 4-байтовой контрольной суммы:
uncompressed_string.encode('zlib')[2:-4] # does not work in Python 3.x
или
zlib.compress(uncompressed_string)[2:-4]
Вы все еще можете использовать модуль zlib
для накачки / спуска данных. Модуль gzip
использует его внутри, но добавляет заголовок файла, чтобы превратить его в файл gzip. При просмотре файла gzip.py
может сработать что-то вроде этого:
import zlib
def deflate(data, compresslevel=9):
compress = zlib.compressobj(
compresslevel, # level: 0-9
zlib.DEFLATED, # method: must be DEFLATED
-zlib.MAX_WBITS, # window size in bits:
# -15..-8: negate, suppress header
# 8..15: normal
# 16..30: subtract 16, gzip header
zlib.DEF_MEM_LEVEL, # mem level: 1..8/9
0 # strategy:
# 0 = Z_DEFAULT_STRATEGY
# 1 = Z_FILTERED
# 2 = Z_HUFFMAN_ONLY
# 3 = Z_RLE
# 4 = Z_FIXED
)
deflated = compress.compress(data)
deflated += compress.flush()
return deflated
def inflate(data):
decompress = zlib.decompressobj(
-zlib.MAX_WBITS # see above
)
inflated = decompress.decompress(data)
inflated += decompress.flush()
return inflated
Я не знаю, соответствует ли это в точности тому, что требуется вашему серверу, но эти две функции могут передавать любые данные в оба конца. Я пробовал.
Параметры напрямую соответствуют тому, что передается функциям библиотеки zlib.
Python ⇒ C
zlib.compressobj (...)
⇒ deflateInit (...)
compressobj.compress (...
Методы
compress
/ распаковать
обновляют структуру и передают ее в inflate
/ deflate
.