Все вышеприведенные ответы идеальны. Но на самом деле CMake использует CTest в качестве своих инструментов тестирования, поэтому стандартный метод (я думаю, что это) выполняет миссию:
enable_testing ()
add_test (TestName TestCommand)
add_test (TestName2 AnotherTestCommand)
Затем запустите cmake и создайте цели. После этого вы можете либо запустить make test, либо просто запустить
ctest
, вы получите результат. Это проверено в CMake 2.8.
Проверьте данные на: http://cmake.org/Wiki/CMake/Testing_With_CTest#Simple_Testing
Есть 94 символа Unicode, которые могут быть представлены как один байт в соответствии со спецификацией JSON (если ваш JSON передается как UTF-8). С этим в мыслях, Я думаю, что лучшее, что вы можете сделать с точки зрения пространства, - это base85 , который представляет четыре байта как пять символов. Однако это всего лишь 7% улучшение по сравнению с base64, его вычисление дороже, а реализации реже, чем для base64, так что это, вероятно, не победа.
Вы также можете просто сопоставить каждый входной байт с соответствующим символом в U + 0000-U + 00FF, затем выполните минимальную кодировку, требуемую стандартом JSON для передачи этих символов; Преимущество здесь состоит в том, что требуемое декодирование равно нулю по сравнению со встроенными функциями, но эффективность использования пространства низка - расширение 105% (если все входные байты одинаково вероятны) против 25% для base85 или 33% для base64.
Окончательный вердикт: base64, на мой взгляд, выигрывает на том основании, что это обычное, легкое и неплохое достаточно , чтобы гарантировать замену.
См. Также: Base91
Поскольку вы ищете возможность записывать двоичные данные в строго текстовый и очень ограниченный формат, я думаю, что накладные расходы Base64 минимальны по сравнению с удобством, которое вы ожидаете поддерживать с JSON. Если вычислительная мощность и пропускная способность вызывают беспокойство, вам, вероятно, придется пересмотреть форматы файлов.
( Изменить 7 лет спустя: Google Gears больше нет. Игнорируйте этот ответ.)
Команда Google Gears столкнулась с проблемой нехватки двоичных данных. типов и попытался ее решить:
JavaScript имеет встроенный тип данных для текстовых строк, но ничего для двоичных данных. Объект Blob пытается устранить это ограничение.
Может быть, вы сможете как-то это исправить.
__ getattr __
имеет то преимущество, что он вызывается только тогда, когда атрибут не существует, поэтому вам не нужен явный список - все, что вы не определяете, будет автоматически проксироваться.
__ setattr __
сложнее, потому что он всегда вызывается. Убедитесь, что вы используете вызов суперкласса или объект .__ setattr __
при установке собственных атрибутов; использование setattr ()
внутри __ setattr __
вызовет бесконечную рекурсию.
Последний бит, влияющий на isinstance, очень сложен. Вы можете сделать это путем присвоения переменной вашего экземпляра оболочки. __ class __
(но это также переопределяет порядок разрешения словаря классов) или путем динамического конструирования вашего типа оболочки с помощью метакласса. Поскольку isinstance так редко встречается в коде Python,
файлы в [текст]. Это снижает накладные расходы по сравнению с предыдущими версиями на основе US-ASCII.
методы кодирования с использованием 8-битного метода кодирования Extended ASCII.
накладные расходы yEnc часто (если каждое значение байта появляется приблизительно
с той же частотой в среднем) всего на 1-2% по сравнению с
33% –40% накладных расходов для 6-битных методов кодирования, таких как uuencode и Base64.
... К 2003 году yEnc стала де-факто стандартной системой кодирования для
двоичных файлов в Usenet ».
Однако yEnc - это 8-битная кодировка, поэтому сохранение его в строке JSON имеет те же проблемы, что и сохранение исходных двоичных данных - наивный способ означает примерно 100% расширение, что хуже, чем base64.
Хотя верно, что base64 имеет скорость расширения ~ 33%, это не всегда верно, что накладные расходы на обработку значительно больше, чем это: это действительно зависит от JSON библиотеки / инструментария, который вы используете. Кодирование и декодирование - это простые прямые операции, и их можно даже оптимизировать с помощью кодировки символов (поскольку JSON поддерживает только UTF-8/16/32) - символы base64 всегда однобайтовые для записей JSON String. {{1} } Например, на платформе Java есть библиотеки, которые могут выполнять эту работу довольно эффективно, так что накладные расходы в основном связаны с увеличенным размером.
Я согласен с двумя предыдущими ответами: