アプリケーションサーバー(JBoss)から大きなファイル(ギガバイト)を取得する必要があり、メモリへのロードを回避するために、EJBを介してストリーミングしたいと思います。
アプリケーションサーバーからストリームとしてデータを取り出すことは可能ですか?
アプリケーションサーバー(JBoss)から大きなファイル(ギガバイト)を取得する必要があり、メモリへのロードを回避するために、EJBを介してストリーミングしたいと思います。
アプリケーションサーバーからストリームとしてデータを取り出すことは可能ですか?
EJBとは、リモートBeanを意味しますか?これらのBeanは通常、Javaシリアル化を使用するRMIに基づいています。RMIを使用してデータをストリーミングすることはできません。
ただし、サーブレットとHTTPを使用すると、これは非常に単純になります。大きなファイルを開いFileInputStream
て、バイトごとにサーブレット出力にコピーするだけです。
Content-Length
クライアントが残りのデータ量を認識できるように、最初にヘッダーを設定しますHttpServletを作成し、ファイルをストリーミングします。
update
ヘッダーに注意してください。setContentLength()
ContentLength-Headerは、のみを受け入れるため、を介して設定することはできませんint
。
次のように設定する必要があります。setHeader("Content-Length", (long)length)
たぶんこれは役立つでしょう:ServletOutputStreamを使用して、メモリの問題なしにJavaサーブレットに非常に大きなファイルを書き込む
制限はありますが、クライアント側によって異なります。クライアントがファイルをメモリに保持する場合、それは機能しません。