В удаленных вызовах параметры и возвращаемые значения должны передаваться по сети. Это использование требует сериализации для преобразования объекта в байтовый поток, а затем десериализуйте его обратно в объект от одного конца в другой.
Поскольку есть предыдущая статья, в которой упоминается Гессиан, здесь мы кратко поговорим о разнице между сериализацией Java и сериализацией гессьян.
Прежде всего, сериализация Гессяна гораздо более эффективна, чем сериализация Java, а генерируемый байтовый поток намного короче. Но относительно говоря, сериализация Java не является надежной, и она не так полна, как поддержка сериализации Java. Причина такой разницы состоит в том, чтобы взглянуть на их реализацию.
Давайте сначала поговорим о сериализации Java. Я не буду говорить о конкретном принципе работы. Сериализация Java будет сериализовать метаданные и бизнес -данные объектного класса, чтобы быть сериализованными от байтового потока, и будет сериализовать все вещи во всем отношениях наследования. Поток Byte, который он сериализует, является полным описанием структуры объекта для содержания, содержащей всю информацию, поэтому она менее эффективна, а байтовый поток относительно большой. Но поскольку все действительно сериализовано, можно сказать, что все может быть передано, поэтому оно также более полезно и надежно.
Что касается сериализации Hessian, его механизм реализации состоит в том, чтобы сосредоточиться на данных и сопровождать простую информацию о типе. Точно так же, как целое число A = 1, Гессиан сериализируется в поток, как I 1. I представляет Int или Integer, а 1 - содержание данных. Для сложных объектов, через механизм отражения Java, Гессьян сериализует все свойства объекта в качестве карты, создавая поток, такой как M -KlassName PropertyName1 I 1 PropertyName S StringValue (вероятно, забудьте точно), который содержит основное описание типа и содержание данных. Во время процесса сериализации, если объект появляется ранее, Гессиан будет напрямую вставить блок, такой как r индекс, чтобы представлять эталонную позицию, тем самым снова устраняя время сериализации и десериализации. Цена на это состоит в том, что Гессиану нужно по -разному обрабатывать различные типы (поэтому Гессиан ленивый и не поддерживает короткие), и ему также необходимо справиться с специальными операциями при столкновении с определенными специальными объектами (например, StackTraceElement). И в то же время, поскольку она не углубляется в реализацию для выполнения сериализации, в некоторых случаях будут определенные несоответствия, такие как карты, полученные с помощью сбора. SynchronizedMap.
Сериализация относится к сериализации объекта в байтовый поток для легкой передачи хранения или сети; В то время как десериализация - это как раз наоборот, преобразование байтового потока обратно в объект. Мы обычно используем метод сериализации Гессан и метод сериализации Java. Эффективность и размер сериализации двух методов сериализации различны. Судя по результатам теста, Гессиан лучше. Вот пример сериализации гессиан (нет файла io и network io, чистая сериализация и десериализация):
/** * Pure hessian serialization* @param object * @return * @throws Exception */public static byte[] serialize(Object object) throws Exception{if(object==null){throw new NullPointerException();}ByteArrayOutputStream os = new ByteArrayOutputStream();HessianSerializerOutput hessianOutput=new Hessianserializeroutput (os); hessianoutput.writeobject (object); return os.tobytearray ();}/** * pure hessian deserialization * @param bytes * @return * @throw NullPointerException ();} BytearRayinputStream IS = new BytearRayinputStream (Bytes); hessianserializerinput hessianinput = new hessianserializerinput (is); объект объекта = hessianinput.readobject (); return;};Другим распространенным методом является сериализация Java:
/** * java serialization * @param obj * @return * @throws exception */public static byte [] serialize (Object obj) выбрасывает исключение {if (obj == null). Выбросить новый nullpointerException (); BytearRayOutputStream OS = new ByTearRayOutputeR (); ObjectOutputeR = New ObjectOutputStream (os); out.writeObject (obj); return os.tobytearray ();}/** * Java deserialization * @param by * @return * @Throws Exception */public Static Obj BytearRayinputStream (by); objectInputStream in = new ObjectInputStream (is); return in.readObject ();}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.