ウェブアプリケーションでExcelの/ CSV形式でレポートをダウンロードできる機能を提供する必要があります。いったん私はエクセルを作成し、それを読んでブラウザに送ったWebアプリケーションでモジュールを作りました。それは正しく働いていた。今回は、ファイルシステムを制御するレベルがないため、Excelファイルを生成したくありません。私は1つの方法は、StringBufferで適切なコードを生成し、正しいcontenttype(私はこのアプローチについてはわからない)を設定することだと思います。他のチームもこの機能を備えていますが、データが非常に大きいときには苦労しています。データのサイズを考えると、この機能を提供する最良の方法は非常に大きい可能性があります。クライアントに気付かないでチャンクでデータを送信することは可能ですか(ダウンロードの遅延を除く)。 追加することを忘れた1つの問題は、非常に大きなデータがある場合、またサーバー側で問題を作成する(CPU使用率とメモリ消費)ということです。私は500のようなレコードの固定量を読んで、それをクライアントに送ってから、完成まで別の500を読むことが可能ですか?Javaを使用して大容量のcsvファイルを効率的にダウンロードする方法
2
A
答えて
2
また、CSVではなくHTMLを生成して、コンテンツタイプをExcelに設定することもできます。これは、着色やスタイル付きのテキストに適しています。
クライアントが圧縮を受け入れる場合、gzip圧縮を使用することもできます。通常、サーブレットフィルタのような標準的な手段があります。
決してStringBufferまたはよりよいStringBuilder。それをストリーミングする方が良い。 setContentengthを呼び出すことができない(できない)場合、出力は(予測的な進歩なしに)チャンクされます。
0
URL url = new URL("http://localhost:8080/Works/images/address.csv");
response.setHeader("Content-Type", "text/csv");
response.setHeader("Content-disposition", "attachment;filename=myFile.csv");
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
int len;
byte[] buf = new byte[1024];
while ((len = stream.read(buf)) > 0) {
outs.write(buf, 0, len);
}
outs.close();
関連する問題
- 1. Linuxでmod_xsendfileを使用して大容量ファイルをダウンロードする
- 2. 大容量ファイルシステムのファイルリストを効率的に取得する
- 3. 大容量ファイルのダウンロード用のMD5チェックサム
- 4. 効率的なcsvファイルのアップロード方法
- 5. 大量の変数を使用して大きなデータを効率的に最適化する方法
- 6. Java - 大量のString配列を効率的に格納する方法
- 7. 大量のオーディオファイルをフォーマットする最も効率的な方法
- 8. Javaで大量のXMLファイルの先頭に属性を追加する最も効率的な方法は?
- 9. Groovy/GParsを使用してCSVファイルの行を最も効率的に処理する方法は?
- 10. 大量のバイトデータをC++からJavaへ効率的に転送する
- 11. BZ2 JSON twitterファイルを使用して大きな(30GB +)TARファイルをPostgreSQLに効率的に読み込む方法
- 12. 大量のリストをHTMLで効率的に表示する
- 13. 大容量ファイルのダウンロード後にPHPスクリプトが終了しない
- 14. 大量にGmailの添付ファイルをダウンロードする方法
- 15. javaを使用してビデオをファイルにダウンロードする方法は?
- 16. Python:効率的な.csvファイルの読み込み方法
- 17. 大量の文字列をJavaでソートするための効率的でスケーラブルな方法
- 18. 静的変数を効率的に使用する方法は?
- 19. ウェブインターフェイスを通じて大容量のファイルを確実にアップロードする方法
- 20. javaを使用してタブ区切りファイルを高速かつ効率的に読み取る方法
- 21. StringBuilderの最も効率的な初期容量サイズですか?
- 22. CoreDataを使用して1つの列を効率的にフェッチする方法
- 23. jQuery Ajaxを使用してASP.NET Web APIからCSVファイルをダウンロードする方法
- 24. C#膨大な量のメモリを使わずに大量のフォルダとファイルを再帰的にループする方法
- 25. Javaで効果的に大量のデータを受信するサーブレット
- 26. 大規模なコードフラグメントを効率的に構築する方法
- 27. Hibernate - 大きなオブジェクトグラフを効率的にフェッチする方法は?
- 28. 強制的にCSVファイルをダウンロードする
- 29. LiferayとMavenを使用してポートレットを効率的にプログラミングする方法は?
- 30. sasを使用して効率的に変数名を変更する方法
これを説明してください:決してStringBufferまたはよりよいStringBuilderそれをストリーミングする方が良い。 – dmay
StringBufferが(不要な)同期化を行っているため、StringBufferは後のStringBuilderよりパフォーマンスが劣ります。もちろん、StringB *で最初にたくさんのものを集めてから流すことは望ましくありません。それをストリーミングするパイプラインは、特にマルチユーザーのシナリオでは非常に効率的です。 –
私は約1000レコードのデータベースを照会し、それをクライアントに送り、次のバッチを取り出します。これは私のメモリフットプリントを非常に減少させます。私は、プロファイラでメモリをテストしてチェックしており、うまくいきます。今では、私のアプリケーションは大量のメモリを使いません。私は、使用されるメモリがクリティカルレベルに達するたびにガベージコレクションされることをプロファイラで確認できます。 – dmay