2011-01-28 4 views
0

InputStreamはデフォルトではシリアル化されません。どのようにInputStreamをRMIに渡してEJBにアクセスするのですか?RMIでInputStreamを渡すには?

+0

が重複する可能性を意味がありません[ジャワのEJBeanにInputStreamオブジェクトを送信するには?](http://stackoverflow.com/questions/1862914/how-to-send-an-inputstream-object- to-java-ejbean) – Thilo

答えて

3

あなたはバイト配列にデータを読まなければならない、いずれかの配列に、または複数のものにすべての(データのサイズに依存するが読み出され)、次いでRMIを横切ってそれらのバイト配列を渡します。読み込まれていないInputStreamは、直接渡すことができるデータではありません。

3

できません。 InputStreamがディスクからファイルを読み込み、別のマシン上のJVM上で実行されているEJBにメソッドパラメータとして送信するとします。他のマシンでデシリアライズされたときに、そのInputStreamが意味を持つようにする方法はありません。

メカニックではなく、根本的な問題について考える必要があります。 InputStreamを直列化可能なオブジェクト(たとえばbyte []配列)に読み込んで渡す必要があります。

InputStreamがメモリには大きすぎるものを読み取った場合は、それをSerializableオブジェクトにラップし、それを渡し、もう一方の端にInputStreamを作成できるようにする必要があります。コース - それ以外の場合は、あなた自身のストリームを作成する必要があります。これはまったく別の質問です)。彼の答え@Konstantinで

2

は書いた:

を読まれていないのInputStreamを直接渡すことができるデータではありません。正確

たとえば、 "java app </usr/bin/yes"というアプリケーションでSystem.inの内容をシリアル化しようとするとどうなりますか? (ヒント: "man yes"を参照)

ストリームをRMIに渡したい場合は、ストリームAPIを実装するラッパークラスを作成し、元のストリームオブジェクトへのRMIコールバックを実行しますデータを読み書きする。ストリームラッパーのシリアライズされた状態にコールバックを実行するためのハンドルが含まれていることを確認する必要があります。

ストリームコンテンツ全体を明示的に読み取って、それをバイト(または文字)配列またはバッファとしてサーバーに渡す方が賢明です。

2

これは電話回線で電話を送信しようとするようなものです。それは、の

関連する問題