
No.5
- 回答日時:
>それともInputStreamを読み込むループの中で読み込んだ内容をbyte配列化してOutputStreamに書き込んでいけばよいのでしょうか。
「読み込んだ内容をbyte配列化」というのはわかりませんが(byte配列に読み込むんだから「読み込んだ内容をbyte配列化」とはいわないと思うし)
// InputStream in
// OutputStream out
byte[] b = new byte[4096];
int len;
while ((len = in.read(b)) > 0) {
out.write(b, 0, len);
}
のように少しづつ読み込み、それを出力すればよいのでは?
と書いてるんですけど。
この回答への補足
ご回答ありがとうございます。
教えていただきましたようにbyte配列に少しずつ
読み込む形式で修正を行いました。
しかし、PDF作成ボタン押下後のメモリの使用量を
jdk付属のvisualVmで監視したところ
ヒープの使用量(150Mぐらい)がほとんど改善されませんでした。
PDF作成に五分くらいかかるのですがその間にじわじわと
メモリ使用量が上昇していく感じです。
Java側の処理はInputStreamをbyte配列に読み込んだ内容
をoutputStreamに書き込む処理しか行っていないのですが
他に考えられる原因はなにかありますでしょうか。
Tomcatがメモリ使ってる????
修正前のプログラムはInputStream(PDFファイルデータ)を
byte配列に一気に読み込んでいたのでこれがヒープの使用量を
押し上げる原因と考えていました。
ただ、200ページ以上あるPDFファイルをbyte配列に読み込んで
いるにもかかわらずそのサイズ(length)を見ると1.5Mほどで
実際に生成されるPDFファイルのサイズとほぼ一致して
おりました。PDFファイルってこんなに軽量?なんでしょうか。
No.3
- 回答日時:
>InputStreamを直接OutputStreamに書き込むことはできるのでしょうか。
OutputStreamの仕様を調べればわかりませんか?
>InputStreamを一旦ファイルに保存(サーバーに保存)してそれをOutputStreamに出力できないかと思うのですが可能でしょうか。
可能か不可能かでいえば可能ですけど。
その発想ですと結局ファイルとして保存したものをOutputStreamで出力するために再度InputStreamでbyte[]に全て読み込もうとされるのではないですか?
一度に全て読み込まずに少しずつ読み込み出力すればいいだけな気がしますけど。
この回答への補足
>OutputStreamの仕様を調べればわかりませんか
OutputStreamについてJavaDocを見てみると
書き込み用のwrite()というのが用意されているのは
わかるのですがその引数が byte[] となっており
一度ファイルをbyte配列に変換してから書き込む必要が
あるのかと思いました。
それともInputStreamを読み込むループの中で読み込んだ
内容をbyte配列化してOutputStreamに書き込んでいけば
よいのでしょうか。
No.2
- 回答日時:
もしかしてですが
外部プログラムで作成したPDFファイルをInputStreamを使ってByteBufferなどに全て読み込んだ後にOutputStreamで出力してるのではないですか?
この回答への補足
ご指摘の通りです。InputStreamをbyte[]で取得してます。
そこでなのですが
InputStreamを直接OutputStreamに書き込むことはできるのでしょうか。
できないのであれば
InputStreamを一旦ファイルに保存(サーバーに保存)してそれを
OutputStreamに出力できないかと思うのですが可能でしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PDF パソコンからUSBメモリにPDFを移したらファイルを開けない 2 2022/08/22 11:42
- PDF ワードで作った文書のPDF化 5 2023/04/10 16:56
- Excel(エクセル) 【VBA】PDF出力に任意のファイル名前を付ける方法 3 2023/07/21 10:55
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- PDF 「PDF文書を簡単にWordで編集する方法」と 罫線が 図形で出力されるのは? 6 2022/06/14 06:51
- Access(アクセス) アクセスで教えてください。 レポートが3つ作成してあるのですが、 pdfに出力するときに 1件のpd 1 2022/12/21 14:44
- その他(IT・Webサービス) WEBサイト内のファイルを探す方法は? 1 2022/11/11 16:38
- Excel(エクセル) PDFファイルに日付を名前にして保存したい。 エクセル2019でワークシートに請求書のフォームを作り 2 2023/05/27 11:13
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダブルクォーテーション(””)...
-
VHDLでこんな事できますか?
-
JSPでのself.print()作成について
-
Java Silverサンプル問題について
-
javaのUDP受信プログラムについて
-
WebアプリでのPDF出力
-
JSPでHTMLの表示が優先されてし...
-
1を0001として出力する処理
-
数字文字列をパック10進数に変...
-
flush()とclose()について
-
ハートマークを表示するには?
-
$.getJSONにJSON.stringifyを
-
Log4Jではログを改行できない?
-
「すでに開かれている」の意味...
-
日付と曜日が合わない
-
Javaで改行などが出来ないのです。
-
GIF画像生成
-
ログ出力する内容について
-
ARMマイコン ロータリーエンコ...
-
VBA? と関数。色の付いた文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Javaで改行などが出来ないのです。
-
1~100までの数字を表示し、か...
-
system.out.printが出力されない
-
1~100までの数字を表示したい
-
System.out.printlnの出力先
-
一定のスペースを空けて端を揃...
-
flush()とclose()について
-
Log4jで機能毎に別ファイルへ出...
-
Tomcatが無応答となる現象が起...
-
行列の表示
-
InputStreamはreadが1回しかで...
-
数字文字列をパック10進数に変...
-
switch分が機能しません。
-
System.out.printlnの意味がよ...
-
JavaScriptの変数をjavaのメソ...
-
Log4Jではログを改行できない?
-
テキストエリアで改行する
-
【SQLServer接続のJSPの記述を...
-
CSVファイルへ出力
おすすめ情報