リモートコールでは、パラメーターと返信値をネットワーク上に送信する必要があります。この使用には、オブジェクトをバイトストリームに変換し、それを一方の端からもう一方の端にオブジェクトに戻すためのシリアル化が必要です。
ヘシアンに関する以前の記事があるので、ここでは、Javaの連続化とHessian Serializationの違いについて簡単に説明します。
まず第一に、ヘシアンのシリアル化はJavaのシリアル化よりもはるかに効率的であり、生成されたバイトストリームははるかに短くなっています。しかし、比較的言えば、Javaのシリアル化は信頼できず、Javaのシリアル化サポートほど包括的ではありません。このような違いの理由は、彼らの実装を見ることです。
最初にJavaのシリアル化について話しましょう。特定の作業原則については話しません。 Javaシリアル化は、バイトストリームからシリアル化されるオブジェクトクラスのメタデータとビジネスデータをシリアル化し、相続関係全体のすべてのものをシリアル化します。シリアル化のバイトストリームは、すべての情報を含むコンテンツのオブジェクト構造の完全な説明であるため、効率が低く、バイトストリームは比較的大きいです。しかし、すべてが実際にシリアル化されているため、すべてを転送できると言えるため、より使いやすく信頼できると言えます。
Hessian Serializationに関しては、その実装メカニズムはデータに焦点を合わせ、単純なタイプ情報を添付することです。 Integer A = 1と同様に、HessianはIのようなストリームにシリアル化します。私はINTまたは整数を表し、1はデータコンテンツです。複雑なオブジェクトの場合、Java反射メカニズムを介して、Hessianはオブジェクトのすべてのプロパティをマップとしてシリアル化し、M className PropertyName1 I 1 PropertyName S StringValue(おそらく、正確に忘れる)のようなストリームを生成します。シリアル化プロセス中に、オブジェクトが前に表示される場合、HessianはRインデックスなどのブロックを直接挿入して参照位置を表し、シリアル化と脱滑りの時間を再び排除します。これを行うことの価格は、ヘシアンがさまざまなタイプを異なる方法で処理する必要があることです(したがって、ヘシアンは怠zyであり、短期間はサポートしません)。また、特定の特別なオブジェクト(StacktraceElementなど)に遭遇するときに特別な操作を処理する必要があります。同時に、シリアル化を実行するために実装に深く入り込まないため、Collections.synchronizedMapを通じて取得したマップなど、特定の矛盾がある場合があります。
シリアル化とは、簡単なストレージまたはネットワーク伝送のためにオブジェクトをバイトストリームにシリアル化することを指します。脱介入は正反対ですが、バイトストリームをオブジェクトに戻します。私たちが通常使用するのは、Hessian Serialization MethodとJava Serialization Methodです。 2つのシリアル化方法の効率とシリアル化サイズは異なります。テスト結果から判断すると、ヘシアンの方が優れています。ここにヘシアンのシリアル化の例があります(ファイルIOおよびネットワークIOなし、純粋なシリアル化と脱派化):
/** *純粋なヘシアンシリアル化 * @param object * @return * @throws例外 */public static byte [] serialize(object object)throws {if(object == null){throw new nullpointerexception();} bytearrayoutputStream os = new bytearrayoutputttream hessianserializeroutput(os); hessianoutput.writeobject(object); return os.tobytearray();}/** * pure hessian deserialization * @param bytes * @return * @throws例外 */public static object deserialize(bytes = = null)if(bytes = = null){bytes = = null) nullpointerexception();} bytearrayinputStream is = new bytearrayinputStream(bytes); hessianserializerinput hessianinput = new hessianserializeinpupt(is); object object = hessianinput.readobject(); return object;}}別の一般的な方法は、Javaシリアル化です。
/** * Java Serialization * @param obj * @return * @throws Exception */public static byte [] serialize(object obj)throws exception {if(obj == null)throw new NullPointerexception(); ObjectOutputStream(os); out.writeObject(obj); return os.tobytearray();}/** * java deserialization * @return * @return */public static object Daserialize(byte [] by)throws exception {if(by == null); bytearrayinputStream(by); objectInputStream in = new objectInputStream(is); return in.ReadObject();}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。