0

Java Spring と Hibernate を使用し、Tomcat 7 をサーバーとして使用して Web サイトを構築しています。このサイトのページでは、ユーザーが画像をクリックすると他の 2 つの画像が読み込まれます。ワークフローは次のとおりです。

クリックされた画像 -> 計算 (Spring メソッド) -> サーバーに jpg として保存された画像 -> サーバーから更新され、クライアントに表示された画像。

画像は次のように読み込まれます。

    response.setContentType("image/jpg");
    OutputStream out = response.getOutputStream();  
    FileInputStream in = new FileInputStream(xzCrossUrl);  
    int size = in.available();  
    byte[] content = new byte[size];  
    in.read(content);  
    out.write(content);  
    in.close();  
    out.close();

これがおそらく最善の方法ではないことはわかっていますが、まだあまり経験がありません。

ローカルでは正常に動作しますが、Tomcat ディレクトリに .war を置いてサーバーに接続すると、Java の outOfMemory ヒープ領域の問題が発生し、イメージのロードがローカルよりもはるかに遅くなります。

tomcat が使用するメモリを増やそうとしましたが、うまくいかないようです。多分私は何か間違ったことをしています。

これで私を助けてもらえますか?

事前にどうもありがとうございました!

4

2 に答える 2

0

Apache Commons IO パッケージから使用するのはどうですかIOUtils.copy()- 入力ストリームを出力ストリームにコピーし、内部でバッファリングするので、その必要はありません。

response.setContentType("image/jpg");
OutputStream out = response.getOutputStream();  
FileInputStream in = new FileInputStream(xzCrossUrl);  
IOUtils.copy(in, out);

IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);

大きなファイルの場合は、使用できますIOUtils.copyLarge()

Commons IO の詳細については、http: //commons.apache.org/proper/commons-io/ を参照してください。

于 2013-10-25T13:33:03.927 に答える