- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Strutsによるバイナリファイル出力)
Strutsによるバイナリファイル出力
このQ&Aのポイント
- Strutsを使用してローカルファイルを転送する際、クライアントからのファイルは正常でも異常でもあります。
- 異常なファイルは、ファイルサイズが少し大きいことがあります。
- バッファーではなくバイト単位での転送を試みましたが、結果は同じでした。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
OutputStreamの使い方の問題ですね。 で、OutPutStream#write(byte[] buffer)は、bufferのすべてを書き込む、と言うものです。 記載のコードの問題はInputStreamで読み込んでいない分のbufferまで書き込まれてしまうものです。 例えば、「ABCDEFGH」と言うファイルがあり、bufferが3文字読み込めるとして ABC DEF GH のようにbufferには読み込まれますが、bufferは三文字分なので、「GH」を読み込んだ際に、前回読み込んでいたFが上書きされずに残ります。書き込んだときは ABC DEF GHF となります。 正しいコードは sos.write(buffer);⇒sos.write(buffer,0,bytesRead); と、読み込んだ分だけ、出力するようにします。
お礼
ukiuni様 ご回答ありがとうございました。 非常に丁寧で分かりやすいご解説感謝いたします。 ukiuni様が書かれた様に修正を行ったのですが やはりクライアントにより、できたりできなかったりします。 ですが、以前のように同クライアントでできたりできなかったりという現象はなくなりました。 こうなるとクライアントの環境次第のような気もするのですが ありえないという気もします… なにか他に気付かれた点ございませんでしょうか