1 名前:じぇいそん [04/06/03 14:00] ネットワークプログラミング相談室ではいろいろな言語の質問が混ざっているようなの で、 Java 用にスレを立ててみることにしました。 Java によるTCP/IPソケットプログラミング、 ネットワークサーバーの構築、RMI 、JINI 、 分散コンピューティングなどについての技や プログラミングついてみんなで話し合いましょう!! 関連スレ: ネットワークプログラミング相談室 Port9 pc5.2ch.net/test/read.cgi/tech/1080658835/
237 名前:デフォルトの名無しさん [2006/01/31(火) 11:42:13 ] Javaで書かれたプロクシサーバーソフトってありますか?
238 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 12:18:09 ] www.mortbay.com/software/Jetty.html www.cs.technion.ac.il/Labs/Lccn/projects/spring97/project9/
239 名前:デフォルトの名無しさん [2006/02/01(水) 01:43:42 ] 初心者の質問じゃないと思うけど、WININETでサーバーサイドのJAVAを実行できますか? その場合、クラス名とかfunction名とかパラメータの渡し方はどうすればいいんでしょうか?
240 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 02:45:55 ] 釣られないぞー
241 名前:デフォルトの名無しさん [2006/03/21(火) 16:30:50 ] マルチすみません。 ash.jp/java/java_http.htm このサイトのURLConnectionのソースをaioeclipse ver2.0.0(JDKは1.5.0)で 流すとエラーが出るんですけどどうすればいいですか? eclipseの設定かしら java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.<init>(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at HttpUrl.main(HttpUrl.java:32)
242 名前:デフォルトの名無しさん mailto:sage [2006/03/22(水) 18:51:31 ] 気分がいいからこたえてやる。 そのプログラムは、"localhost"、つまり実行してるPCの80番ポートに TCPで接続しようとしている。80番ポートは通常HTTPのポート。 なので、実行してるPCの80番ポートで待っているプログラムがない、 つまり、HTTPサーバが動いてないと、接続は拒否される。 それが、 > java.net.ConnectException: Connection refused: connect ということ。 ANHTTPDでも動かしとけば、connectは成功するだろ。 ネットワークプログラムは常に通信相手があって成り立つってことを忘れるな。
243 名前:デフォルトの名無しさん [2006/03/22(水) 20:28:55 ] 自レスです String proxyHost = ""; int proxyPort = 8080; を消して if (proxyHost == null) { urlObj = new URL(url); } else { urlObj = new URL("http", proxyHost, proxyPort, url); } ここを urlObj = new URL(url); だけにしたらソースもってこれました。 urlObj = new URL("http", proxyHost, proxyPort, url); が悪さしてたってことですか?
244 名前:デフォルトの名無しさん mailto:sage [2006/03/22(水) 20:32:20 ] 連投すみません String proxyHost = ""; で if(proxyHost == null)がfalseに行ってることは 上記はnullではないのですか? nullの気がするんですが・・・
245 名前:デフォルトの名無しさん mailto:sage [2006/03/22(水) 22:26:33 ] つjava初心者スレ
246 名前:デフォルトの名無しさん [2006/03/25(土) 18:04:07 ] 基本的な質問ですが、 あるノードからあるノードにデータが動くためには、 必ずsokcetクラスを使う必要があるのでしょうか?
247 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 10:35:24 ] >>41 Stringはサブクラスを作れないはずだが
248 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 17:19:38 ] dhcpはつまんねーな。 IM-IRCブリッジとかどう? メモリリークしまくりで楽しそうだよ(w
249 名前:デフォルトの名無しさん [2006/03/27(月) 17:47:32 ] >>246 ソケットがないと通信できないんだから当たり前
250 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 19:54:08 ] NFSとか、1台のSCSI HDDを共有してるとかはないですか、そうですか。
251 名前:デフォルトの名無しさん mailto:sage [2006/04/10(月) 17:43:05 ] 誰かcyberlink for java使って UPnP対応ルータのポートを開けて AddMappingするだけの簡単な プログラムを組んでくれませんかねぇ。
252 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 11:04:58 ] ヒント:宿題スレ
253 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 04:41:17 ] UDPを使ったネットワークプログラミングについて質問です。 UDPを使ってクライアント/サーバーを作り、複数のクライアントとやり取りできるようにサーバーにThreadを継承させました。 2人以降のクライアントがパケットを送ってきたらその度新しくスレッドを作ろうと考えているんですが、どうやってパケットが届いたときに新しくスレッドを作るんでしょうか? どうしても2人目が送ったパケットがそのままオリジナルのサーバースレッドに受信されてしまいエラーが出るのですが・・。
254 名前:253 mailto:sage [2006/05/24(水) 04:59:56 ] 少し説明不足でした。 サーバークラスの中にコンストラクタ、run()、main()と作り、main()に今のところ、 int well_known_port = SERVERPORT; // デフォルトポートナンバー try { testServer server = new testServer(well_known_port); server.start(); } catch(IOException e) { System.err.println(e); } としてあります。 run()の中でパケットを作ったり受信したりするプロセスを全て入れてあります。 上のままではスレッドが1つしか作れてないので、クライアントが増えるたびに新しいスレッドを作りたいと思っています。 ヒントでもいいので教えていただければ嬉しいです。
255 名前:253 mailto:sage [2006/05/24(水) 22:33:12 ] 解決しましたm(_ _)m
256 名前:デフォルトの名無しさん [2006/05/30(火) 04:37:12 ] 帯域制御機能をもったjavaのプロキシソフトサーバーソフトってありますか?
257 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 08:27:40 ] そもそもjavaだと遅いから全てが帯域制限されて意味が無い。 delegateとかsquidをjavaに移植してくれ。 それって全く関係無い香具師がudp送って来ても鯖プロセスが増えて。。。 udpパケットの送信元偽造されて送られてくることが無い様に祈れ。
258 名前:デフォルトの名無しさん [2006/05/30(火) 11:18:50 ] javaで書かれた普通のプロクシサーバーソフトを、sleepとか使ってちょいといじれば良いだけ。 javaとネットワークプログラミングを勉強してから一月くらいでそのくらいのことはできる。
259 名前:デフォルトの名無しさん [2006/06/10(土) 05:43:53 ] すいません。 String ip="192.168.0.2"; int port=5555; Socket socket = new Socket(ip,port); 以上のような接続方法はただしいでしょうか? ホスト名ではなくIPアドレスで指定したいのですが、 どのようにすればよいかご教授ください。 よろしくお願いします。
260 名前:デフォルトの名無しさん [2006/06/10(土) 17:44:38 ] ブラウザを作っているのですが、 POSTでエンティティボディのデータを送るときの 文字コードって決まっているのでしょうか? たとえば、サーバーがIIS+JSPコンテナで、 クライアントで入力したものをサーバーに送る場合、 どの文字コードでサーバーに送ればいいのでしょうか? HTMLに指定されている文字コード?
261 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 21:42:37 ] >>259 ただしい。 ただし、IPv6対応に問題が出る(Windows Vista以後はIPv6フル対応)が、 アンタの責任だから、まあ知ったこっちゃねえし。
262 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 10:12:57 ] こんなんあった jump.sagasu.in/goto/butikire-movie/
263 名前:デフォルトの名無しさん mailto:sage [2006/06/13(火) 11:05:27 ] socketを使って、Streaming通信中、 Broken pipe がおこってしまう場合があります 連続的なデータを送っているのですが クライアントが切断処理をしていないのに Broken pipe が怒ってしまうのですが、送っちゃいけないデータなどは送っていません なんらかの心当たりがある人いらっしゃいますでしょうか?
264 名前:デフォルトの名無しさん [2006/06/16(金) 01:42:38 ] >>251 www.cybergarage.org/blog/archive/2006_04_01_skonnoblog.html#114503507548323193
265 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 03:40:37 ] 間のファイヤーウォールやNATに切られてもリトライするような処理ぐらい入れろ。 POSTするときの仕様ぐらい、HTTPの仕様を読もうぜ。 つーか仕様も作らないで行き当たりばったりで変な実装するな。
266 名前:デフォルトの名無しさん [2006/06/17(土) 12:36:13 ] Javaでtracerout出来るようになったの?
267 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 11:46:43 ] >>266 raw socket位投げられるだろう。
268 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 17:08:41 ] へ?どうやって?
269 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 17:36:15 ] >>268 うぜぇしね
270 名前:デフォルトの名無しさん mailto:sage [2006/06/19(月) 11:30:13 ] Process p = Runtime.getRuntime().exec(new String[] {"traceroute", host});
271 名前:デフォルトの名無しさん mailto:sage [2006/06/21(水) 22:23:04 ] 【教えて!】 が良い味出してる
272 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 00:11:30 ] サーバー側でインプットストリームを常に監視して、 ストリームにデータが入ったらある処理をはじめるようにしたいのですが、 うまいやり方ありますか? 今はサーバー側のスレッドでしたのようにまってます。 while(in.available < 1) { Thread.sleep(10); } 〜ある処理〜
273 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 01:54:51 ] new I/O
274 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 18:10:04 ] >>272 BlockingI/O(通常の)で、インプットストリーム1つに対してスレッドを 1つ貼り付ける。 あるいは1つのスレッドで複数のインプットストリームを処理するなら、 >>237 の言うとおり、new I/Oを使う。
275 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 12:14:40 ] >>237 ではなく >>273 です
276 名前:デフォルトの名無しさん [2006/07/04(火) 21:05:22 ] 時給1000円でJava教えてくださるかたを募集します 場所 所沢(池袋・高田馬場から直通) i−want−to−study−java@hotmail.co.jp (アドレスは全角で書いてあるので半角に直してください) よろしくおねがいします
277 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 21:22:28 ] 初心者なんですがこれから、ネットワーク勉強したい思ってます。 ftpクライアント、httpクライアント、echoサーバなどのperl,cの 資料はネットに豊富にあったので、大体わかってきました。 ただ、根本的な仕組みがわかってないので、これから どうしようか考えてます。 まずは、peer to peerで、チャットやファイル交換がしたいと思います。 パソコン一台の環境なんですが勉強できますか? パソコン一台で、2台に見せかけて通信 とかできるのかと思いまして。 パソコン2台ないとだめなんでしょうか。 本とかサイト紹介していただけるとがんばっていけそうです。 よろしくお願いします。 スレ違いでしたら、どこか飛ばしてくださいませ。
278 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 23:38:11 ] >>277 localhostに対してコネクション張りゃいいですよ。
279 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 01:36:14 ] >>278 知識不足で、具体的な方法がまだわからないですが、 できるということがわかればあとは、本などで調べたいと思います。 ありがとうございました。
280 名前:276 [2006/07/17(月) 21:29:54 ] 教える対象は超初心者です。 専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です
281 名前:デフォルトの名無しさん [2006/07/21(金) 21:55:33 ] 大阪から行きます。帝国ホテルスイーツを取ってくださるなら考える余地ありです
282 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 22:22:09 ] 仕様: クライアントはテレビの録画予約をするGUIアプリケーション。 クライアントから番組のチャンネル、放送開始時刻、終了時刻を送信。 サーバは予約情報をDBにストック。 サーバはDBを監視していて、予約開始時刻になったら録画APIを起動させる。 クライアントは現在の予約情報などをサーバに問い合わせて表示もできる。 さて、サーバ側はどんな実装にする? クライアント・サーバ間の通信はソケット?それともHttp?できれFirewall越えしやすい方がいい。
283 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 22:43:51 ] >>282 がクライアントもサーバも書くの?
284 名前:282 mailto:sage [2006/07/21(金) 22:47:16 ] >>283 サーバだけでいいです。
285 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 10:44:52 ] >>282 ICMP
286 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 11:32:23 ] >>282 MythTVのJava版クライアント作れよ。 www.mythtv.org/
287 名前:デフォルトの名無しさん [2006/07/23(日) 22:16:18 ] >>286 つまりクライアントとのセッションを管理するフロントエンドシステムと 時刻を監視してイベントを処理するバックグランドシステムの 2アプリケーション/サーバの組み合わせにするってことですね。 2つのアプリケーション間は特に通信はいらないかな。あえていうならDB経由で情報をやりとりするということか。。。
288 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 22:17:40 ] >あえていうならDB経由で情報をやりとりするということか。。。 泣きたくなるくらい広いスコープのグローバル変数が誕生するわけですね。
289 名前:デフォルトの名無しさん [2006/07/23(日) 22:37:37 ] >>288 もっといいやり方があるというのなら対案をだせよ。 民主党のダメ政治家かおまえは。
290 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 22:38:44 ] >>289 めんどいなぁ、んじゃSOAP。Axisでも使ってさ。 ほれ、コレで満足か?
291 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 22:47:12 ] 何を揉めてるのか知らんがSOAPで組めばええやん Firewall越えを要件に入れてるなら
292 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 00:25:01 ] >>291 AJAXでもいいじゃん。
293 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 00:31:09 ] プログラマの俺様ツールにブラウザアプリを採用するのか?w
294 名前:デフォルトの名無しさん [2006/07/24(月) 00:33:14 ] >>290-292 もめてるのはフロントエンド⇔バックエンド間をデータベースを経由して情報をやり取りする部分。 ここはFirewallをこえる必要ないからhttpとは関係なくなる。 (クライアント⇔フロントエンドはAJAXでもFirewall越えるからOKなのはたしか。でも問題はここじゃない。)
295 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 00:38:03 ] >>294 なんなの?ageは俺らをバカにしようとかそう言う意味ですか?
296 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 01:06:34 ] >>294 Ajaxでいいなら「フロントエンド⇔バックエンド間」なんてものは存在せんだろ
297 名前:sage [2006/07/24(月) 01:07:25 ] Httpがいいんじゃない?実装が楽だから。
298 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 01:38:05 ] >>296 MythTVやPostgreSQLのようなアーキテクチャも勉強した方がいい。 Ajaxを取り入れるととうやればMythTVのfrontend-backgroundのあいだのやりとりを存在なくせるのか説明してくれ。
299 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 01:43:05 ] Tomcatひとつで出来るだろ
300 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 01:45:56 ] >>299 予約の録画開始はどうする?
301 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 01:49:03 ] どうもせんよ、監視してAPI呼び出すだけだろ web.xmlに監視クラス書いておしまい
302 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 10:42:58 ] まあ思いつかないぐらいなら実装は絶望的です。外注に出したら?
303 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 11:02:45 ] >>298 なんでMythTVにこだわるん?
304 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 22:03:42 ] MythTVは二回しか出てきてないじゃん。
305 名前:デフォルトの名無しさん [2006/08/31(木) 13:24:54 ] javaでFTPクライアントソフトを作成したんですが、 認証まではうまくいくんですがPASVモードでの dataSocket = new Socket(serverIP.replace(',','.'),serverPort); でタイムアウトが発生し接続できません。 windowsでは問題なく実行できます。 環境は +−−−−−−+ +−−−−−−+ LINUX−−−−| | | | | ルータ- |−−−−−| モデム |−−−−−インターネット WIN−−−−−−| | | | +−−−−−−+ +−−−−−−+ ちなみにlinuxのFTPコマンドではファイル転送も問題なくできます。 原因がさっぱりわかりません。
306 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 14:03:18 ] PASVなのに20番を使うからです
307 名前:デフォルトの名無しさん [2006/08/31(木) 15:18:25 ] >306 ポートは20でなく動的に接続しています。 305にも書いたけどwindowsではFTPに接続、転送できています。
308 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 00:18:24 ] FTPの勉強からやり直したほうがいいよ。 FTPプロトコル手順を理解出来てない。
309 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 13:25:12 ] >>305 の、1行のコード dataSocket = new Socket(serverIP.replace(',','.'),serverPort); だけでわかるわけないだろ。 PORTのバイトオーダー絡みじゃないかとエスパーレス。
310 名前:デフォルトの名無しさん mailto:sage [2006/09/02(土) 10:16:54 ] >>308 またお前か・・・。お前こそいい加減RFC読んでくれ。
311 名前:デフォルトの名無しさん mailto:sage [2006/09/05(火) 15:57:32 ] java.net.URLConnection con=url.openConnection(); InputStream input=con.getInputStream(); byte[] buffer=new byte[1000*1000]; int size=input.read(buffer); String data=new String(buffer, 0, size); url がwww.yahoo.co.jp/ のとき全部取り出せないで途中で切れて終わってしまいます。 Reader を使うと上手くできるので、解決策よりも どうして途中で尻切れなのかなのか教えてください。
312 名前:デフォルトの名無しさん mailto:sage [2006/09/05(火) 22:15:27 ] >>311 適当なとこまで読んだところで、readが制御返すから。 TCPの1セグメントか、タイムアウトか、バッファ最大のどれかだろ。 InputStream#readのJavaDocを熟読せよ。
313 名前:デフォルトの名無しさん mailto:sage [2006/09/05(火) 22:25:29 ] >>312 さっそく、ありがとうございます。 タイムアウトかなと思ってたんですが、 これってライブラリーのバグの範疇だと思うのですけど… Readerでは尻切れしないので。
314 名前:デフォルトの名無しさん mailto:sage [2006/09/05(火) 23:22:08 ] >>313 Readerって思いっきりバッファリングするやん。 readで要求サイズすべてがいっぺんに取得できると考える方が間違い。
315 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 00:06:38 ] 最近ではFTPのかわりにHTTPで100MBのファイルをダウンロードとか良くあるけど、このときってどうするの? URLConectじゃなくてSocketつかえって?
316 名前:デフォルトの名無しさん [2006/09/06(水) 04:03:21 ] Reader input=new InputStreamReader(con.getInputStream()); とやると、全部読み込めるようなので、>>314 の指摘のバッファリングとかこれと何らかの関係あるのでしょうか? java.io.InputStream か java.io.Reader かで挙動が違うのはなぜかというのだと思うのですが・・・・
317 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 15:07:37 ] >>316 InputStreamReaderがバッファリングするかどうかは知らんが、 InputStream#readの戻り値は、JavaDocの通り、 1以上: 読んだバイト数 0: 与えた読み込み先のbyte[]の空きが0 -1: ストリームの終わり だ。-1かIOExceptionまで読み続ければ良い。 >java.io.InputStream か java.io.Reader かで挙動が違う そもそも、*InputStreamはbyteを読むもので、*Readerはcharを読むものなんだが、この違いは理解してるのか?問題にならんのか?
318 名前:デフォルトの名無しさん [2006/09/06(水) 16:30:39 ] >>317 横から失礼しますが、どうもあなたが指摘しているところはズレているようで、少し傍観してみてはいかがですか? > だ。-1かIOExceptionまで読み続ければ良い。 それで、なにが原因なんでしょか?何を指摘したいのか、さっぱり分かりません。 > そもそも、*InputStreamはbyteを読むもので、*Readerはcharを読むものなんだが どうも偉そうに聞こえるますが、その違いで何か関係があるなら、そのあたりを指摘すれば良いでしょう。 ところで、byteかcharかの違いで何か問題があるんでしょうか?
319 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 17:37:11 ] (´Д`;) …
320 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 17:44:04 ] >>318 ハゲワラ
321 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 17:47:17 ] >>319-320 じゃ、仕事も終わりだし、そろそろ風俗に行こうや!
322 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 20:19:58 ] お、イイッすねえ。 聖コスプレ学園なんてどうっすか?
323 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 23:27:23 ] おまいらセフレか彼女ぐらい作れよ。 Javaなんか弄ってても子孫は残せないぞ。
324 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 23:33:24 ] エロゲーほしい 誰か作ってー
325 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 07:10:56 ] >>317 APIを写したのはわかったけど、それで君は何を言いたいわけ?
326 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 07:25:47 ] >>325 プゲラ
327 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 07:51:22 ] >>312 >適当なとこまで読んだところで、readが制御返すから。 これには何か根拠でもあるの?
328 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 07:52:27 ] >>314 >Readerって思いっきりバッファリングするやん。 これには何か根拠があるの?
329 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 13:32:07 ] >>318 >それで、なにが原因なんでしょか?何を指摘したいのか、さっぱり分かりません。 何の原因を聞いているのか知らんが、 >>311 >url がwww.yahoo.co.jp/ >のとき全部取り出せないで途中で切れて終わってしまいます。 の原因だとしたら、 >byte[] buffer=new byte[1000*1000]; >int size=input.read(buffer); が、「1000*1000バイトか、ストリームの終わりまで読みこむ」という意味の命令ではないこと。 実際に何バイト読み込むかは実装・クラス・状況次第。 だから、readの返り値を見て、ストリームの終わりに達するか、例外が発生するまで 読み込め、と言ってるんだが。 >どうも偉そうに聞こえるますが、その違いで何か関係があるなら、そのあたりを指摘すれば良いでしょう。 尻切れになる/ならないは別にして、application/octet-stream なストリームを、 InputStreamReaderで読んだら、取り返しがつかんだろ。byte[]とchar[]は可逆変換ではない。 >ところで、byteかcharかの違いで何か問題があるんでしょうか? データ型としてのbyteとcharなら単に1バイトか2バイト幅かだけの違いだが、 Readerがcharで返すということは、Readerへの入力のbyteシーケンスを 指定されたencodingに従ってunicode (ucs2)に変換してるわけだ。 得られたchar[]なりStringを同じencodingでbyte[]に変換しても、 元のバイト列になる保証は無い。
330 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 18:18:39 ] >>329 >尻切れになる/ならないは別にして 勝手にそらしているようですけど、 ここでは尻切れが問題なんですけど? >application/octet-stream なストリームを、 InputStreamReaderで読んだら、取り返しがつかんだろ。 もしかして、ここで指摘している事は、 new InputStreamReader(input, encoding) であれば五体満足ということなんのしょうか? 文字コードは話題ではないですけど・・ >byte[]とchar[]は可逆変換ではない。 可逆変換でないから、だから、尻切れとどう関係があるんですか? >>ところで、byteかcharかの違いで何か問題があるんでしょうか? >データ型としてのbyteとcharなら単に1バイトか2バイト幅かだけの違いだが、 >元のバイト列になる保証は無い。 それが尻切れ(転送中断や想定外)と何か関係があるのか聞いているのですけど? 文字化けとか問題にしてないのですけど、 また勝手に解釈して関係ない知識自慢は見苦しい…
331 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 18:28:47 ] >>329 >「1000*1000バイトか、ストリームの終わりまで読みこむ」という意味の命令ではないこと。 クライアント側に失敗となる節が無いのに、 結果が途中で尻切れになる原因が問題なのです。 「クライアント側が、どうやって何バイト読み込むかや終わりまで読み込むか」などの 解決策を問題にしているわけではありません。 結果が途中で尻切れになる原因が問題なのですが 勝手に読み替えてませんか?
332 名前:デフォルトの名無しさん [2006/09/07(木) 19:25:52 ] いつまでも的確なレスが無くて、調べてみたんですけど、 これってまだ直ってないバグなんじゃないですか? bugs.sun.com/bugdatabase/view_bug.do?bug_id=4188105 bugs.sun.com/bugdatabase/view_bug.do?bug_id=4125538
333 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 19:48:05 ] じゃ、仕事も終わりだし、今日は風俗に行かないでこのスレ眺めてようや!
334 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 19:58:25 ] >>332 それ、既に closed fixed だし、 読み込みが途中から始まるってバグだから見当違いだと思うぞ。 尻切れになるのは低レベルAPI からの出力を極力そのまま返すという意味で 便利ではないかもしれないが、正しい実装であるとはいえる。 低レベルAPI が何故尻切れになるかは >>312 が既に予想してるとおり。 もう一つ言うと、InputStream は尻切れになってはいけないとは、 どこにも規定されていないので、 その意味でも URLConnection#getInputStream() が返す InputStream の実装は正しく、バグではない。
335 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 20:06:58 ] 正しい実装とか規定とかぬかしているけど、実際に確かめから発言してるのかな・・・
336 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 20:18:22 ] >>335 確かめる必要なんかないよ。それとも >>311 は嘘ついてるのか? java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/InputStream.html#read (byte[]) > b が null の場合は、NullPointerException がスローされます。 > b の長さが 0 の場合、バイトは読み込まれず、0 が返されます。 > そうでない場合は、1 バイト以上読み込み処理を行います。 > ストリームがファイルの終わりに達しているために読み込むバイトがない場合は、値 -1 が返されます。 > そうでない場合は、1 バイト以上読み込まれ、b に格納されます。 InputStream が規定してるのは「1バイト以上読み込む」であって EOF か b が満杯になるまで読み込む、とはどこにも書いてない。
337 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 20:27:17 ] available()があるってことが全てなのさ。