Сериализация Java против JSON против XML
Мне интересно, какой сериализованный механизм мы должны выбрать при работе с объектами, передаваемыми по сети. Каковы плюсы и минусы?
Я знаю, что большую часть времени мы используем JSON
или же XML
за AJAX
так как формат передачи в значительной степени Javascript
формат и плюс JSON
довольно легкий с небольшой площадью, поэтому Java
Сериализация полностью вне таблицы?
4 ответа
В общем, важный вопрос заключается в том, какой клиент получит сериализованные объекты - браузеры / механизмы JavaScript, такие как (node-js), клиент Java, неизвестные / несколько клиентов.
JSON - Синтаксис JSON - это, по сути, JavaScript, и поэтому любой компонент с движком JS будет очень хорошо справляться с его синтаксическим анализом - даже сложные структуры данных будут эффективно преобразованы в "живые" объекты. Парсеры JSON существуют практически для любого языка, и им легко пользоваться, даже если не используется движок JS (например, Google Gson, который может легко конвертировать JSON в соответствующие объекты), что делает его хорошим кандидатом для межъязыкового общения - например, в архитектуре обмена сообщениями.
XML - разделяет многие преимущества JSON - кросс-языковой, легкий и т. Д. Adobe Flex, например, очень хорошо обрабатывает XML, даже лучше, чем JSON. Это определенно подходящая замена для JSON. Я лично предпочитаю JSON для его JS-подобного синтаксиса, но XML тоже хорош.
Сериализация Java - должна рассматриваться только для связи Java с Java. Важным примечанием является то, что определения классов должны быть на отправляющей и получающей сторонах, и часто вы не получите много, передавая весь объект. Я не исключаю RMI как коммуникационный протокол, он упрощает разработку. Однако полученные компоненты приложения будут жестко связаны, что затруднит их замену.
Еще одно замечание - Сериализация в целом имеет свои накладные расходы. Однако, когда связь осуществляется по сети, узким местом часто является сеть, а не сама сериализация / десериализация.
Я думаю, что это зависит. Если вы отправляете запрос http или что-то еще, то JSON или XML, очевидно, является хорошим выбором. Если вы просто отправляете Java-объект через сокет TCP для какого-то распределенного алгоритма или чего-то еще, я думаю, что сериализация Java проще / лучше
В то время как сериализация по сети будет работать как xml, так и json. Это зависит от потребителя этой информации.
Если потребитель является браузером, использующим Ajax для запроса некоторой информации и визуализации чего-либо на экране, обычно лучше всего использовать jason, так как он уже находится в объектном формате Javascript, и нет необходимости в преобразовании в объекты, совместимые с Javascript. На самом деле многие Ajax-библиотеки (например, jQuery) имеют хорошую поддержку json.
Если вы являетесь другим приложением, которое может быть, а может и не быть в Java, то предпочтительным механизмом сериализации является XML. Веб-сервисы очень интенсивно используют XML.
Если вашим потребителем является другая Java-программа, то определенно предпочтительным вариантом является сериализация Java (например, RMI). Так что его еще нет:-).
Но да, между XML и Json есть размытая грань. То, что я упомянул здесь, это общая практика. Вот хорошая статья, рассказывающая об аспектах xml против jason.
Однажды я посетил тренинг инженера по безопасности, и я не рекомендовал использовать собственную сериализацию Java из-за некоторой слабости безопасности на стороне собственной десериализации Java, которая может принимать любые (потенциально внедренные вредоносные) потоки байтов. Также у XML есть известная проблема безопасности, когда определение / схема определена неправильно, что называется XXE (XML Enternal Entities). Это может вызвать атаку "миллиарда смеха" на стороне потребителя.
Я думаю, что как разработчик нам не нужно заботиться о сериализации объектов ответа. но если мы рассмотрим JSON, у него есть достойные преимущества, чтобы выбрать XML.
- JSON Response не нуждается в закодированном ответе в отличие от XML.
- обработка и обработка JSON быстрее по сравнению с XML, потому что он не анализируется.
- Ответ XML для AJAX всегда кодируется, поэтому обработка занимает много времени.
- JSON лучше всего подходит для Jquery для пользовательского интерфейса и работает быстрее.
- Обработка огромных данных Например: извлечение данных индексации на сервер и с сервера, обработка JSON быстрее.