Я одобряю объектный подход, чтобы избежать ненужных поисков. Объекты свойств могут быть так же легко заполнены, когда вы вызываете свой заводский метод для построения всей сущности (используя простой код обратного вызова для вложенных объектов). Нет никаких недостатков, которые я вижу, кроме использования памяти (но вы бы кешировали свои объекты правильно?). Таким образом, все, что вы делаете, заключается в замене стека на кучу и повышение производительности из-за неэффективности поиска. Надеюсь, это имеет смысл.
Когда у Вас есть некоторые двоичные данные, которые Вы хотите поставить через сеть, Вы обычно не делаете этого, просто передав потоком биты и байты по проводу в формате .raw. Почему? потому что некоторые медиа сделаны для потоковой передачи текста. Вы никогда не знаете - некоторые протоколы могут интерпретировать Ваши двоичные данные как управляющие символы (как модем), или Ваши двоичные данные могли быть завинчены, потому что базовый протокол мог бы думать, что Вы ввели комбинацию специального символа (как то, как FTP переводит окончания строки).
Так для обхождения этого люди кодируют двоичные данные в символы. Base64 является одним из этих типов кодировки.
, Почему 64?
, поскольку можно обычно полагаться на те же 64 символа, присутствующие во многих наборах символов, и можно быть довольно уверены что попытка данных закончиться с другой стороны неповрежденного провода.
Главным образом я видел, что это раньше кодировало двоичные данные в контекстах, которые могут только обработать ASCII - или простое - наборы символов.
Для расширения немного на том, что говорит Brad: много транспортных механизмов для электронной почты и Usenet и других способов переместить данные не "8 битов, чистых", что означает, что символы вне стандартного набора символов ASCII могли бы быть искажены в пути - например, 0x0D мог бы рассматриваться как возврат каретки и превращаться возврат каретки и перевод строки. Основывайте 64 карты все двоичные символы в несколько стандартных букв ASCII и чисел и пунктуации, таким образом, они не будут искажены этот путь.
Я использую его в практическом смысле, когда мы передаем большие двоичные объекты (изображения) через веб-сервисы. Таким образом, когда я тестирую веб-сервис C# с помощью сценария Python, двоичный объект может быть воссоздан с небольшим волшебством.
[В Python]
import base64
imageAsBytes = base64.b64decode( dataFromWS )
Это используется для преобразования произвольных двоичных данных к тексту ASCII.
, Например, почтовые вложения отправляются этот путь.
Некоторые протоколы транспортировки только позволяют алфавитно-цифровым символам быть переданными. Просто вообразите ситуацию, где управляющие символы используются для инициирования специальных действий и/или который только поддерживает ограниченную разрядную ширину на символ. Base64 преобразовывает любой вход в кодирование, которое только использует алфавитно-цифровые символы, +
, /
и =
как дополнительный символ.
От http://en.wikipedia.org/wiki/Base64
термин Base64 относится к определенному кодированию передачи содержания MIME. Это также используется в качестве общего обозначения для любой подобной схемы кодирования, которая кодирует двоичные данные путем обработки его численно и перевода его в основу 64 представления. Конкретный выбор основы происходит из-за истории кодирования набора символов: можно выбрать ряд 64 символов, который является и частью подмножества, характерного для большей части кодировки, и также печатаемого. Эта комбинация оставляет данные вряд ли, чтобы быть измененной в пути через системы, такие как электронная почта, которые были традиционно не 8-разрядные чистый.
Base64 может использоваться во множестве контекстов:
- Эволюция и Thunderbird используют Base64 для запутывания почтовых паролей [1]
- , Base64 может использоваться, чтобы передать и сохранить текст, который мог бы иначе вызвать коллизию разделителя
, Base64 часто используется в качестве быстрого, но небезопасного ярлыка для затемнения секретов, не подвергаясь издержкам управления криптографическим ключом
, Спаммеры используют Base64 для уклонения от основных инструментов антиспама, которые часто не декодируют Base64 и поэтому не могут обнаружить ключевые слова в закодированных сообщениях.
- Base64 используется для кодирования символьных строк в файлах LDIF
- , Base64 иногда используется для встраивания двоичных данных в XML-файл, с помощью синтаксиса, подобного......, например, bookmarks.html Firefox.
- Base64 также используется при связи с правительством Финансовых печатающих устройств Подписи (обычно по последовательным или параллельным портам) для уменьшения задержки при передаче символов получения для подписания.
- Base64 используется, чтобы закодировать двоичные файлы, такие как изображения в рамках сценариев, избежать в зависимости от внешних файлов.
- Может использоваться для встраивания необработанных данных изображения в свойство CSS, такое как фоновое изображение.
Кодировка Base 64 является способом взять двоичные данные и превратить его в текст так, чтобы он был более легко передан в вещах как данные HTML-формы и электронная почта.
Это - в основном способ закодировать произвольные двоичные данные в тексте ASCII. Требуется 4 символа на 3 байта данных плюс потенциально немного дополнения в конце.
По существу каждый 6 битов входа кодируется в алфавите с 64 символами. "Стандартный" алфавит использует A-Z, a-z, 0-9 и + и/, с = как дополнительный символ. Существуют БЕЗОПАСНЫЕ ОТ URL варианты.
Википедия является довольно хорошим источником большей информации.
Это - текстовое кодирование двоичных данных, где результирующий текст имеет только буквы, числа и символы "+", "/" и "=". Это - удобный способ хранить/передавать двоичные данные по медиа, который конкретно используется для текстовых данных.
, Но почему Основа 64? Эти две альтернативы для преобразования двоичных данных в текст, которые сразу приходят на ум:
Основа 64 карты 3 байта (8 x 3 = 24 бита) в 4 символах, которые охватывают 6 битов (6 x 4 = 24 бита). Результат смотрит что-то как "TWFuIGlzIGRpc3Rpb...". Поэтому чрезмерное увеличение размера является только простым 4/3 = 1.3333333 раза оригинал.
В первые годы компьютеров, когда телефонная линия межсистемная коммуникация не была особенно надежна, быстрый & грязный метод проверки целостности данных использовался: "разрядная четность". В этом методе каждый переданный байт имел бы 7 битов данных, и 8-е будет 1 или 0, чтобы вынудить общее количество 1 бита в байте быть ровным.
Следовательно 0x01 был бы передан как 0x81; 0x02 был бы 0x82; 0x03 остался бы 0x03 и т.д.
К далее этой системе, когда набор символов ASCII был определен, только 00-7F были присвоенные символы. (Все еще сегодня весь набор символов в диапазоне, с 80 FF, нестандартен)
, Много маршрутизаторов дня помещают проверку четности и перевод байта в аппаратные средства, вынуждая компьютеры, присоединенные к ним иметь дело строго с 7-разрядными данными. Эти почтовые вложения силы (и все другие данные, которые являются почему HTTP & протоколы SMTP основаны на тексте), чтобы быть преобразовывают в формат только для текста.
Немногие маршрутизаторы, пережившие в 90-е. Я сильно сомневаюсь, что любой из них используется сегодня.