2012-03-04 5 views
1

ファイルを直接Webサービスにストリーミングしようとしています。私は、メインメモリのように、ファイルのコンテンツの保存に使用されないであろうと期待していたライターにストリームできません

ここ
while(<Read from file , line>){ 
    out.write(line); 
    out.flush(); 
} 

out.close(); 

、としてそれにデータを書き込む保つ私は次

 URL url = new URL("http://localhost:9200/tree/public/"); 
    URLConnection urlconnection=url.openConnection(); 
    urlconnection.setDoOutput(true); 
    ((HttpURLConnection)urlconnection).setRequestMethod("POST"); 
    ((HttpURLConnection)urlconnection).setRequestProperty("Content-type", "text/html"); 
    Writer out=new OutputStreamWriter(urlconnection.getOutputStream(); 

を使用してライタを作成したことについては 一度にファイルから1行だけがそこにあるように。

しかし、コードを実行すると、メモリ使用量が急増しています。ファイルの内容はメインメモリのどこかに保存されています。 ヒープ・ダンプでは、ほとんどのスペースを保持しているのはPosterOutputStreamです。

+1

あなたはどのくらいの記憶を話していますか?カバーの下には必然的なバッファリングがいくつかあります。 –

+0

私はGBのメモリを話しています。私はちょっとバッファリングに気をつけません。 "軽い"の場合 –

+0

GBの範囲のメモリを見ているなら、何か間違っています。もっと詳しく述べることはできません。 –

答えて

1

チャンクストリーミングを有効にすると問題が解決しました。 ((HttpURLConnection)urlconnection).setChunkedStreamingMode(1024 * 1024);