1 名前:じぇいそん [04/06/03 14:00] ネットワークプログラミング相談室ではいろいろな言語の質問が混ざっているようなの で、 Java 用にスレを立ててみることにしました。 Java によるTCP/IPソケットプログラミング、 ネットワークサーバーの構築、RMI 、JINI 、 分散コンピューティングなどについての技や プログラミングついてみんなで話し合いましょう!! 関連スレ: ネットワークプログラミング相談室 Port9 pc5.2ch.net/test/read.cgi/tech/1080658835/
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()があるってことが全てなのさ。
338 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 22:44:37 ] >確かめる必要なんかないよ。それとも >>311 は嘘ついてるのか? ほら、だから憶測で話してもね・・ さっきは、思い込みとかだったし。 >、とはどこにも書いてない。 何度もわざわざAPIを引用するのは構わないけど、 そのAPIから読み取って、原因は何かを>>311 は 指摘してほしいんじゃないか? >InputStream が規定してるのは「1バイト以上読み込む」であって EOF か b が満杯になるまで読み込む、とはどこにも書いてない。 「EOF か b が満杯になるまで読み込む」ことを話しているのではなくて、 read(byte[])ではなぜ尻切れなのかなんだけど? read(byte[])ではなぜ全部読み込めないのかじゃないよ。 ずいぶんと自尊心が強い人なんだね。 同じ事を繰り返していて、そろそろ醜いんだけどもう止めてくれる? byte[]とchar[]がどうとか言ってたけど、結局なにか関係あるのか?
339 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 23:25:35 ] べつにさ、煽られようが何だろうがべつにこっちは困らないんだよね。 レポートの締め切りに間に合わないのはあんたなんだし。
340 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 23:26:22 ] ↓ここで"勝利宣言"
341 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 00:01:53 ] はい、readのスニペット。 int cnt = 0; while(cnt >= READBYTES){ int tmpcnt = read(READBYTES); if(tmpcnt <= 0){ throw nullpo; } cnt += tmpcnt; }
342 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 00:39:03 ] 誰か一人だけが悔しいみたい プププ 今日は風俗行かなくても楽しめたな プププ
343 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 00:49:19 ] >>338 > read(byte[])ではなぜ尻切れなのかなんだけど? > read(byte[])ではなぜ全部読み込めないのかじゃないよ。 ……。何が違うのかを説明してくれ。
344 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 01:22:08 ] >>338 例えば、 上は、初めから読み込もうが途中から読み込もうが、 尻切れ(終わりが途中で切れる)に関係していない。 下は、必ず初めから読み込まれている必要があって、かつ、 予定していたところ(長さ)まで読み込んで全部読み込んだといえるが、 この全部(初めから終わりまで)読み込むかどうかは尻切れと関係ない。 たしか、途中で尻切れになる原因だったよね。 日本語の解釈の差だと思うけど・・ 今ちょっと忙しいからこれぐらい。 available()たしかに・・ フーゾク、俺も連れてってくれ・・
345 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 01:55:46 ] >>343 字数が違うんじゃね?
346 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 02:08:05 ] >>338 > read(byte[])ではなぜ尻切れなのかなんだけど? そーゆー仕様だから。以上。 で良いんじゃないかと思ってみたりする。
347 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 06:42:42 ] 風俗もいいが、エイズで身体が腐っちゃうのは勘弁だな。
348 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 07:38:38 ] ストリームのバイナリー転送で 途中で切れて終わったり 完了しなかったりしてるけど int in.read() で1バイトずつちまちまやらないと ダメなんじゃないのか?
349 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 09:28:26 ] InputStream in=con.getInputStream (); byte[] buf=new byte[1000*1000]; int size=0; for (int k=0; size<buf.length && (k=in.read())!=-1;) { buf[size++]=(byte)k; } これはチマチマですが、尻切れぜずにストリーム終わりまで読み込めます。解決策。 >>341 for (;;) { int sz=in.read(buf, size, buf.length); if (size>=buf.length || sz==0 || sz==-1) break; size+=sz; } でも、urlが "www.yahoo.co.jp/" などは例外が出ます。 Exception in thread "main" java.lang.IndexOutOfBoundsException at sun.net.www.http.ChunkedInputStream.read(Unknown Source) at java.io.FilterInputStream.read(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unkn own Source) at Test.main(Test.java:37) とすると、InputStreamは、int read()ですむのですが、 int read(byte[]), int read(byte[],int,int)は、(どうやって使うかと言うよりも)自分で使うときはどこが使いどころなんでしょうか?
350 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 09:52:26 ] >>329 はやさしいなあ
351 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 10:15:56 ] >>349 > for (int k=0; size<buf.length && (k=in.read())!=-1;) > buf[size++]=(byte)k; これ、尻切れにはならんかもしれんが、最初に 0が入らんか? > int sz=in.read(buf, size, buf.length); InputStream の仕様では、size が 0以外の条件で この行を実行する場合 IndexOutOfBoundsException投げないといけない事になってる。 in.read(buf, size, buf.length - size) とかしないと。 あと、size>=buf.length の条件でループ抜けるなら size += sz やった後の方が良いぞ。 ついでに言うと、sz == 0 も特に要らない。
352 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 10:18:48 ] > これ、尻切れにはならんかもしれんが、最初に 0が入らんか? あ、入らないね。失敬失敬。
353 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 10:45:51 ] >>350 確かにやさしいです。読み違えなかったらですけど・・ InputStream in=con.getInputStream (); byte[] buf=new byte[1000*1000]; int size=0; for (int k; size<buf.length; ++size) { k=in.read(); if (k!=-1) break; buf[size]=(byte)k; } >>341 がいいたいのはこれでしょ? for (int sz; size<buf.length; size+=sz;) { sz=in.read(buf, size, buf.length); if (sz==-1) break; } int InputStream.read(byte[],int,int)は結局どのあたりで使うのだろう・・
354 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 11:01:35 ] こっちね。 for (int sz; size<buf.length; size+=sz;) { sz=in.read(buf, size, buf.length - size); if (sz==-1) break; }
355 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 13:47:45 ] >>311 >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); このコードが、「(1000*1000バイトから溢れない範囲で、)ストリームの終わりまで読め」 っていう意味では無いことは理解してる? まぁ、理解してないから、 >>331 >クライアント側に失敗となる節が無いのに、 >結果が途中で尻切れになる原因が問題なのです。 なんて、頓珍漢なこと言ってるんだろうけど。 クライアント側で、「尻切れでいいよ」っていう意味のプログラム(>>311 )書いてるのに、 尻切れにならない理由がない。もちろん、常に尻切れになるって意味ではない。 > int InputStream.read(byte[],int,int)は結局どのあたりで使うのだろう・・ そりゃ、>>353 の前半よりも、>>354 の方が効率が良いからだろ。 動作速度無視、動けば良い、というのだったら、int InputStream#read()だけで足りる。 byte[]、char[]云々は、 >>316 の > Reader input=new InputStreamReader(con.getInputStream()); > とやると、全部読み込めるようなので、 を受けて。それで仮に読みこめたとしても、元のコードで読みたかったものとは違うものになる、って意味。 ああ、でも最終的に >String data=new String(buffer, 0, size); とStringにしたいのか。なら、問題無い。
356 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 15:41:18 ] Runtime.exec() で起動した Process のプロセスIDはどうすればわかりますか?
357 名前:デフォルトの名無しさん [2006/09/08(金) 17:10:29 ] >>355 お前はもうしゃしゃり出てこないくていい。 お前は最後まで気がついてないだろうけど、もう解決してるんだよ。 素直に「私だけわからないので、教えてください」と書けこの阿呆が! >このコードが、「(1000*1000バイトから溢れない範囲で、)ストリームの終わりまで読め」 って勝手に解釈している、あなたが原因です。そんな事はどこから読み取れるのでしょうか? お前はいつまでも図々しくて頭悪いの分かったから、このスレの初めに戻ってもっと熟読してこい。 ところで、何度も同じことしか書いてないけど、お前は実際に試してないで、勝手なこと言ってるんじゃないのか? どうも懲りてないようだから、今後はおまえの事を監視して付け狙うしかなさそうだな。 何か起こる前に、せいぜい身近なことに気を配ってた方がいいだろう。
358 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 17:12:45 ] またまたワロタ
359 名前:デフォルトの名無しさん [2006/09/08(金) 17:23:26 ] >355 知ってると思うけど、 int InputStream#read(byte[],int,int) は int InputStream#read()を内部で回している使っているだけだぞ。 サブクラスで実装する人は、もっと効率が良い方法でやるとよいというだけで、 つべこべ言わずに、動作速度重視・効率も良い実装を書いてみろや!
360 名前:デフォルトの名無しさん [2006/09/08(金) 17:25:37 ] >>355 そりゃ、>>353 の前半よりも、>>354 の方が効率が良いからだろ。 これの意味が分からないけど、何を根拠にそういえるの?
361 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 17:27:57 ] へー、Javaのネットワークって感情で書くのか
362 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 17:29:35 ] 逃げてばかりで またまたワロタ
363 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 17:41:25 ] へー、Javaのネットワークってテイラー展開で書くのかですが、何か?
364 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 17:47:04 ] ストリームからのデータ読み取りはニュートン法で収束させますが何か?
365 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 18:03:27 ] 収束ということは、零点がある保障はどこでわかるの?
366 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 18:17:37 ] >>364 読み取りは微分できるの?