Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

HttpUrlConnectionのJavaバージョン6と7の差異について

お世話になっております。
経験が浅いもので、質問させて頂きます。

Javaで画像データを分割してダウンロードをしており、
アプレットでHttpUrlConnectionを使用しています。
これまではJavaのver.6.21で問題無く挙動しておりまし
たが、
ver7.21の端末で実行した際に、ダウンロードが失敗し
ました。

内容としては、分割してダウンロード後にファイルを結
合し、
サーバ側のファイルサイズと一致チェックを行なってい
ますが、そこでのエラーでした。
分割の方法ですが、計算によって5242880バイトごとに
区切り、
HttpUrlConnectionのsetRequestPropertyで"Range"を指
定しています。
 例)conn.setRequestProperty("Range",  "bytes=0-
5242879");

その際、ファイルサイズ"10241306"バイトの画像データ
の場合、
 1回目:Range Header = bytes=0-5242879
 2回目:Range Header = bytes=5242880-10241306
となり、それぞれサイズをHttpUrlConnectionの
getContentLengthで確認すると
 1回目:5242880バイト
 2回目:4998426バイト
となるはずですが、
 1回目:5242880バイト
 2回目:5242880バイト
となってしまっています。

HttpUrlConnectionのsetRequestPropertyで"Content-
Length"を指定すればと思い、
設定してみたのですが、解消されません。
ちなみに、ループ処理内でHttpUrlConnectionのインス
タンスを作成しているので、
再利用をしているわけではないと思われます。

ここからが質問内容です。
?JavaのバージョンごとにHttpUrlConnectionの
Content-Lengthが異なる、という事象について
 なにかご存知の方はいらっしゃいますでしょうか?
?HttpUrlConnectionのContent-Lengthを設定する際の
メソッドは、
 setRequestPropertyではないのでしょうか?
 (getRequestPropertyで"Content-Length"を指定した
結果、nullが返ってきました)


拙い文章、質問で恐縮ですが、どなたかご助力のほど、
よろしくお願い致します。

5

回答

15196

閲覧

5件の回答

評価

0

接関係あるかわかりませんが…

私もAppletで別の現象が発生した際にJREのバージョンを全てチェックしたことがあります。

こちらの現象はモーダル制御が効かないというものでしたが1.6〜1.7の全バージョンにて動作検証してみたところ1.6.21だけが期待通りの動作をしていたということがありました。

詳しく調査まではしていませんが現在もoracleに問い合わせ中の状態です。参考までに。

Appletに不具合がある可能性は非常に高いと思われます。
可能でしたらネットワークキャプチャなどを使用して実際のリクエストを見てみることをお勧めします。
Microsoftからもネットワークモニターなどのツールも無料で手に入れれるので簡単に検証ができます。
※根本的な問題解決にはならないかもしれませんがHttpUrlConnectionに問題が無いということ程度は検証できるかもしれません。 
 

評価

0

質問のような処理を実装したことはない者ですが、
APIを見ると、Content-Lengthを設定する際には
http://docs.oracle.com/javase/jp/7/api/java/net/Http
URLConnection.html#setFixedLengthStreamingMode(int)
を利用するようです。

評価

0

最初に返信したものです。

そもそも古いバージョンでは動作していたんですよね?
と、なるとContent-Lengthの設定云々以前の問題のような気がします。

あとの匿名さんが提示されているメソッドで設定出来たとしてもそもそもContent-Lengthがちゃんと設定されている前提の話ではないかと…

と、いうことでまずはリクエストをモニタリングしてみましょう。

評価

0

多分こっちに投げたほうが解決が速そうな問題。

http://bugs.sun.com/bugdatabase/index.jsp
(En only)

評価

0

質問者です。

皆様、ご回答ありがとうございます。
バージョン相違による問題だと思いますので、まずは最
初の匿名さんが仰られているようにネットワークキャプ
チャを用いて、現状を把握致します。

2番目の匿名さんがご提示されたメソッドについても検
証してみます。

4番目の匿名さんがご提示されたバグの報告掲示板につ
いても、類似例を探し、ないようであれば投稿してみま
す。

ありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。