トップページ⇒tech
1001コメント344KB

【初心者】Java質問・相談スレッド103【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/06/27(水) 07:23:27
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド102【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1180419689/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

次スレは>>980あたりで。
0026デフォルトの名無しさん2007/06/27(水) 16:59:10
>>25
ん?
使えるが結果を見られないってことでは?
0027デフォルトの名無しさん2007/06/27(水) 17:12:23
headlessモードについての話じゃない??
0028デフォルトの名無しさん2007/06/27(水) 17:54:11
結果を見られないってどういうこと?
クライアント側でGUIは表示されるけど、イベントは受付けないとか?

apptet以外にクライアント側でGUI表示できるの知らなかったんで
詳しくお願いします。
0029デフォルトの名無しさん2007/06/27(水) 17:56:54
>>28
> apptet以外にクライアント側でGUI表示できる

そんなこと誰も書いてないと思うが。
0030デフォルトの名無しさん2007/06/27(水) 18:04:41
そういうことじゃないの?
0031デフォルトの名無しさん2007/06/27(水) 18:18:26
というか、>>20 早く帰ってきて収拾してくれwww
0032デフォルトの名無しさん2007/06/27(水) 18:32:38
ていうか誰が誰だよw
idない板はこれだからややこしい
0033デフォルトの名無しさん2007/06/27(水) 19:26:06
servletがクライアントに渡すのは基本的にはHTMLや画像なんだから、ク
ライアントにAWTのウィンドウ等が表示されるわけないでしょ。どこで
JVMが動いているか考えればあたりまえ。

servletでAWTのウィンドウを出したりすると、とうぜんservletが動いて
いるサーバの画面にウィンドウが出ることになる。そんなことして意味
があることはまずないが、できないわけじゃない。(>>22)

画像処理などのためにservlet内でAWTを使うことがある。そういうとき
のために headless モードというのがある。(>>27)
0034デフォルトの名無しさん2007/06/27(水) 19:32:52
今までphp+mysqlでやってたものですが、
jdbc+postgreSQLに手を出してみました。

php+mysqlのときみたいにaddslashをして
エスケープをしたいのですが、どうやったらいいかわかりません(涙)
java.sqlの中にはそういうものはないみたいだし・・・

0035デフォルトの名無しさん2007/06/27(水) 19:48:52
涙を出す前にJDBCについて調べる気は無かったのだろうか?
0036デフォルトの名無しさん2007/06/27(水) 19:53:47
なんでheadlessっていうの?
brainlessの印象を受けるからfacelessの方が良かった
0037デフォルトの名無しさん2007/06/27(水) 21:10:26
>>28
GWT
0038デフォルトの名無しさん2007/06/27(水) 22:55:55
>>34
PreparedStatementが勝手にやってくれる
0039デフォルトの名無しさん2007/06/27(水) 23:32:07
LGPLが適用されているライブラリを利用する場合、
作成したプログラムの再配布の際にはソースコードの公開が必要でしょうか?

「動的なリンク、であれば利用元のプログラムはLGPLの呪縛から逃れられる」
というような解釈のようですが、動的なリンクとはJavaではどこまで該当するのでしょうか?
0040デフォルトの名無しさん2007/06/27(水) 23:38:12
ソースコードを使うかバイナリを使うかじゃない?
0041デフォルトの名無しさん2007/06/28(木) 00:11:12
入力した値が文字(列)か数か判定したのですが、どのような条件で判定できますか?
0042デフォルトの名無しさん2007/06/28(木) 01:23:29
文字列.matches("\\d+")か文字列.matches("\\d*")
0043デフォルトの名無しさん2007/06/28(木) 03:26:37
未だなにも調べてない状態なのですが
java3Dの中のvecmathパッケージについて
このパッケージでできるベクトル計算の利点はどんなところにあるんでしょうか
また、java3Dの直近の日本語Documentを探しているのですが見つからず、
できたらURLを教えていただけないでしょうか
0044デフォルトの名無しさん2007/06/28(木) 06:40:37
>>42
「.」とか「-」とかは?
0045デフォルトの名無しさん2007/06/28(木) 08:34:54
Javaでゲーム開発を考えているんですが、思考ルーチン関連での入門書で最適な本ってありませんか?
ゲーム理論系を探すと経済学関連のが多くて選択しにくいもので、実際のプログラム例などが載っている本がいいです。
言語はJavaが得意ですが、Cなども最低限の知識はあります。
0046デフォルトの名無しさん2007/06/28(木) 08:39:51
>>45
ゲームという大きな括りではなく、どういう種類のゲームを作るかによって
学ぶものは変わってくると思うが。
0047デフォルトの名無しさん2007/06/28(木) 08:44:00
>>46
確かにそうですね。
やりたい種類は、ターン制のストラテジーゲームです。
手札などに制限が多く、打てる手数は高々10〜20程度。
ただし、先読みの要素が多いという感じです。
ぐぐってみたりするとげミニマックス法とか色々でてくるのですが、本として1冊は欲しいもので
0048デフォルトの名無しさん2007/06/28(木) 08:57:05
>>40
ありがとうございます
単純に実行部分のバイトコードを添付するだけでいいわけですか
↓の部分が適用されるってことですか?

>もし著作物が『ライブラリ』とリ ンクされた実行形式ならば、著作物を完全かつ機械読み取り可能な
>「『ラ イブラリ』を利用する著作物」のオブジェクトコードあるいはソースコー ド(どちらかでも可) と一緒にし、
>ユーザが『ライブラリ』を改変した後 に再リンクして、改変された『ライブラリ』を含む改変された実行形式を
>作成できるようにする
0049デフォルトの名無しさん2007/06/28(木) 11:16:54
postgresqlに接続しようとしてるんだけど

org.postgresql.util.PSQLException: The connection attempt failed.
Caused by: java.net.UnknownHostException: localhost

こんなエラーがでて接続できないんだけど、
これってJDBCドライバ自体は認識できてるんかな?
ずっと「JDBCドライバがないYO」って言われてたんで、そこが気になる。
誰か教えてくれー
0050デフォルトの名無しさん2007/06/28(木) 11:53:45
>>49
いえす
localhost が解らんって言われているけど、postgresqlならば
jdbc:postgresql://localhost:5432/test
のようにURL指定してないとか?
それでもダメなら、localhost を 127.0.0.1 で試す。
後、WindowsのFireWallの可能性もあるかな?
0051492007/06/28(木) 13:37:37
>>50
レスありがとう。
なんとか動きました。

postgresqlにTCP接続する設定をやっていなかった。
// これがダメだったのかな?

postgresql.confを編集して
URL指定に「jdbc:postgresql://127.0.0.1:5432/hoge」で接続できました。
loclhostだと失敗したんで根本的な解決はしてない気もするけど、とりあえず動いたからおk!!!
0052342007/06/28(木) 13:52:52
>>38

ありがとうございます。
さっそく実行してみたのですが、次は

org.postgresql.util.PSQLException: The column index is out of range: 2, number of columns: 1.

と表示されてしまいます。
?の数とsetStringやsetIntの数が違うのかなと思ったのですが、
一緒でわかりません・・・


0053デフォルトの名無しさん2007/06/28(木) 14:02:01
>>45
「15歳からはじめる〜」って本を良く耳にする。でも読んだ事はない。

Javaでゲーム作成 2本目
http://pc11.2ch.net/test/read.cgi/gamedev/1130373830/
0054デフォルトの名無しさん2007/06/28(木) 14:25:08
>>52
配列の要素数が0で始まるのか1で始まるのかをもういちど確認してくれ
0055デフォルトの名無しさん2007/06/28(木) 14:34:25
現在の実行コンテキストが Applet として実行されているかどうかを判定することってできる?
0056デフォルトの名無しさん2007/06/28(木) 14:44:03
getCodeBase()
0057デフォルトの名無しさん2007/06/28(木) 15:10:44
Eclipse使ってたら・・・

PreparedStatement のメソッド setDate(int, Date) は引数 (int, Date) に適用できません。

どういうことだよorz
0058デフォルトの名無しさん2007/06/28(木) 15:15:27
要するに

setDate(int, java.sql.Date) は引数 (int, java.lang.Date) に適用できません。

ってことだ。エラーメッセージが悪い。
0059デフォルトの名無しさん2007/06/28(木) 15:44:17
サーブレットから別のデーモン スレッドを実行した場合、
そのスレッドを長時間実行してもタイムアウトになることはありませんよね?
0060452007/06/28(木) 15:47:26
>>53
それは既に読了です。
いい本ですが、あくまでSwing関連のJavaの入門書でした
0061デフォルトの名無しさん2007/06/28(木) 18:35:06
>>60
まぁ、>>47みてやりたいことは大体判った。
結局のところ探索、評価の繰り返しをいかに精確かつ高速にやるか、というところが肝なわけで…
まともにやろうとすると結構専門的なところまで踏み込むことになるけれども一応参考資料(英語ですが)
ttp://www.cs.ualberta.ca/~mburo/publications.html
もともとはリバーシのアルゴリズム解説だけれど、探索や評価のアルゴリズムは他にも応用がききそうなので。
日本語の資料だとつっこんだところまで解説したものってみたことないので情報工学とか数学関係の専門書を
あたった方が早いかもです。
0062デフォルトの名無しさん2007/06/28(木) 19:28:14
>>60
ボーンデジタル
0063452007/06/28(木) 20:45:50
>>61
やはり専門的な分野になると英語になるのかぁ・・・
最初の1〜2冊は日本語で勉強したかったんです。

Amazonで漁っていくつか候補があったのでとりあえず片っ端から買ってみますw
0064デフォルトの名無しさん2007/06/28(木) 20:51:31
>>62
これですか・・・
ttp://www.amazon.co.jp/Game-Programming-Gems-Mark-DeLoura/dp/4939007286/ref=pd_sim_b_1_img/249-4142550-3954713?ie=UTF8&qid=1183031211&sr=8-11
流石にいい値段しますが興味はあります・・・むぅ
0065デフォルトの名無しさん2007/06/28(木) 22:39:12
HttpURLConnectionで取得したデータ(画像)のnputStreamを
複数回読みたいんですが、どうしたらいいですか?
0066デフォルトの名無しさん2007/06/28(木) 22:55:51
>>65
できない

InputStreamのStreamの意味を調べたことあるか?
尚、普通の人は画像データを変数に格納するだろう
0067デフォルトの名無しさん2007/06/28(木) 22:58:41
>>65
一回closeしてしまったら、もう読み込めないから、もう一回接続して新しいInputStreamで読み込む。
もしくは、最初のInputStreamで読んだデータは手元にあるはずだから、それを利用する。
0068デフォルトの名無しさん2007/06/28(木) 23:02:55
>>66
> InputStreamのStreamの意味を調べたことあるか? 
あります、すみません
resetメソッドとかよくわからずに使ってうまくいかなかったもので…

> 尚、普通の人は画像データを変数に格納するだろう 
InputStreamが引数なメソッドを2つ呼び出す必要があるんですが、
やっぱそのたびに生成しなきゃいけないんでしょうか。
↑これがよくわからんかったのでリサイクルしたいと思いました。

>>67
接続は1回にしたいです。
0069デフォルトの名無しさん2007/06/28(木) 23:05:13
ああ、closeしてなくても一回読み出したデータをもう一回読み出すのはInputStreamでは無理だから、
頭からもう一度とはいかない。全データのプッシュバックをサポートするstreamを作って、
HttpURLConnectionのInputStreamに接げばいけるかもだが、
それは最初に読んだデータを再利用するようにした方がいいような気が。
0070662007/06/28(木) 23:11:05
>>68
言い方がきつかった、すまん
ただ、Streamってのは流れなんだ、流れてくるものを2回読むことはできない
だからデータを溜めておかなければならない。

ちなみに、使うメソッドがInputStreamで引数を持つという事自体がおかしいということはないか?
Imageで受けたり、byte[]で受けたり出来ないような特殊な事情があるのか、検討して欲しい。

それでも、どうしてもInputStreamにしなければならないならば、byte[]等でキャッシュしておき、自前で再度流すようにコーディングする必要があるな
0071デフォルトの名無しさん2007/06/28(木) 23:11:30
>>68
InputStreamのサブクラスにはByteArrayInputStreamというものもある。
何もネットから読み込むだけのストリームではない。
最初にそのメソッドを呼ぶ前にHttpURLConnectionでバイト配列にデータを読んで、
そのメソッドにはバイト配列をバッファにしたByteArrayInputStreamを渡してやればいい。
0072デフォルトの名無しさん2007/06/28(木) 23:31:38
>>70
最終的にはswtのImageを作るんですが、
その前に元のデータのハッシュを取る必要があるんです。
最初はImageを作って それからgetImageData().dataのハッシュを
取ればいいかと思ってたんですが、dataってビットマップ(広義)と知って…

>>71
そうですね、
一旦bete[]にバッファしてそれぞれByteArrayInputStream作ることにします。

ご協力ありがとうございました。
0073572007/06/29(金) 00:12:38
>>58

ありがとう やっと意味がわかったよ

0074デフォルトの名無しさん2007/06/29(金) 00:22:36
>>72
そういうのってNIOでやるんじゃない?
0075デフォルトの名無しさん2007/06/29(金) 00:29:41
>>72
DigestInputStream
0076デフォルトの名無しさん2007/06/29(金) 00:51:14
Javaを使って遠隔機械操作をしたいんですが関連するパッケージを
教えてください。

RMIとかなんでしょうか
0077デフォルトの名無しさん2007/06/29(金) 00:54:31
>>76
遠隔機器操作だけじゃわからん。どういう事をやりたいか具体的に書く。
0078デフォルトの名無しさん2007/06/29(金) 01:05:56
サーボモーターの制御及び遠隔監視ですが、被制御側にJAVAとCのプログラムを配する予定です。
知りたいのは、ネットワークのストリームの確立方法と制御命令の伝達方法、及び監視情報のリアルタイム
での送受信方法です。

0079デフォルトの名無しさん2007/06/29(金) 01:10:10
78の補足
回線は優先無線の両方を考えてますが、とりあえず有線の方法、通常のインターネット経由の方法で
教えていただけたらと思います。
0080デフォルトの名無しさん2007/06/29(金) 01:17:50
Cも使うのならベタにSocket使えばいいんじゃね。
0081デフォルトの名無しさん2007/06/29(金) 01:20:20
Set<Foo> set = new HashSet<Foo>();
for(Foo f: set) {
    // ここで set を変更
}

で ConcurrentModificationException が出るときの解決案って

for(Foo f: set.toArray(new Foo[set.size()])) {
    // ここで set を変更
}

以外にどのようなものがありますか?
0082デフォルトの名無しさん2007/06/29(金) 01:43:20
なんか1.5ぐらいからJavaの文法、複雑になっちゃったな
>>81とか俺には理解できない・・・
0083812007/06/29(金) 02:14:21
>>82
大丈夫。Java7 あたりから俺もわからなくなる。
0084デフォルトの名無しさん2007/06/29(金) 02:26:47
やさしいjavaで勉強初めて一週間程たちます。
色々調べたのですがわからなかったので、初歩的な質問ですが教えてください。

class Car
{
int n;
}
とした時に

Car car[ ] = new Car[3];

のような配列ぽい変数にできるのでしょうか?
今試しているのですがエラーになります。
コンストラクタを使ってオブジェクトを作る時は配列は使用できないのでしょうか?
先のページには出来ている様なコードが書いてあるのですが、抽象クラスでないとダメなんでしょうか?
0085デフォルトの名無しさん2007/06/29(金) 02:27:12
>>80
失礼Cはマイコン用のCで低レベルの制御用にのみ使うものです、通信そのもは複雑なネットワークに
も対応できるようにJAVAを使おうと思っています。
0086デフォルトの名無しさん2007/06/29(金) 02:29:50
>>84
配列要素それぞれをnew Car()で生成する必要があります
Vector使ったほうが簡単では?
0087デフォルトの名無しさん2007/06/29(金) 02:31:17
>>84
エラーの種類がわからないから断定は出来ないけど、
おそらく発生しているエラーは NullPointerException だと思う。

Car[] car = new Car[3];
for (int i = 0; i < car.length; i++)
    car[i] = new Car();
0088デフォルトの名無しさん2007/06/29(金) 02:34:24
>>86
>>87
なるほど!!
まずは配列要素それぞれで生成するわけですね。
早速試してみます。
0089882007/06/29(金) 02:42:00
>>87さんのコードを書き加えたら出来ました!
ありがとうございました!
0090デフォルトの名無しさん2007/06/29(金) 03:11:34
Javaアプレット(ファイル名:abc.jar)でOKボタンを押したときのイベントで、Javaアプレット自身を再起動させるプログラムを書きましたが、時々動作しなかったりしています。

OKボタンを押したときのイベントの中にRuntime.exec()で2つのシェルスクリプトを実行するプログラムを書きましたが、
1つ目のJavaアプレットのプロセスをkill するスクリプトは常に動作しますが、2つ目のJavaアプレットを起動するスクリプトが動作したり、動作しなかったりしています。
・1つ目 stop.sh:(abc.jarのプロセスをkill するスクリプト)
・2つ目 start.sh:java -jar abc.jar

String[] cmd= {"stop.sh", "start.sh"};
Runtime.getRuntime().exec(cmd)
でcmdにスクリプトを渡すようにしています。
この書き方はだめなのでしょうか?

ソースは手元にありません。すみません。
よろしくお願いします。
0091デフォルトの名無しさん2007/06/29(金) 03:22:45
アプレットから Runtime.exec ですか。実に危険だな。
0092デフォルトの名無しさん2007/06/29(金) 03:35:31
>>90
2つ目動作することある?

Runtime#exec(String[]) の2つ目以降の要素は1つ目の要素の引数ではないか?
0093902007/06/29(金) 03:47:39
すみません。間違えていたと思います。

>String[] cmd= {"stop.sh", "start.sh"};
>Runtime.getRuntime().exec(cmd)

String cmd[] = new String[2];
cmd[0]="stop.sh"
cmd[1]="start.sh"
Runtime.getRuntime().exec(cmd[0])
Runtime.getRuntime().exec(cmd[1])

0094デフォルトの名無しさん2007/06/29(金) 04:39:48
>>85
組み込み用Cしか動かないような環境でJava動くの?
0095デフォルトの名無しさん2007/06/29(金) 04:43:53
>>90
どうせネタだろうけど

Runtime.getRuntime().exec(cmd[1]);
Runtime.getRuntime().exec(cmd[0]);

これでいいよ
0096デフォルトの名無しさん2007/06/29(金) 06:48:01
>>81
setの変更がremoveのみなら、こういう手も。
for(Iterator<Foo> iter = set.iterator(); iter.hasNext();){
 Foo f = iter.next();
 if(...){
  iter.remove();
 }
}
せっかくの enhanced for loop が使えないのはもったいないけど。
0097デフォルトの名無しさん2007/06/29(金) 07:45:23
>>81
こんな感じにする
Set<Foo> set = new HashSet<Foo>();
Set<Foo> temp = new HashSet<Foo>(set); // 丸々コピー
for(Foo f: set) {
    // ここで temp を変更
}
set.clear();  // 一度、空にしてから
set.addAll(temp); // 全部詰めなおす

参照の問題が起きないのであれば、2行を、set = temp;としてもいいけど、
このメソッドでSetを生成して返すのでもなければ、clear addAll のコンボのがいいと思う。
もし、他のスレッドからsetの更新の可能性があるならば、同期も取ろう
0098デフォルトの名無しさん2007/06/29(金) 15:40:33
URLConectionでリクエスト送信→レスポンス受信な処理をやろうとしてるんですが、
ループ内でリクエスト送信後、レスポンス受信の前に次のリクエストを送る事ってできないんでしょうか?
レスポンスを待たずにリクエストを送りたいと思っています。
こういうのはthreadを使うべきなんでしょうか?
0099デフォルトの名無しさん2007/06/29(金) 17:11:46
threadを使うべき
0100デフォルトの名無しさん2007/06/29(金) 17:53:15
国際化対応って最後にまとめてやったほうが効率いいですか?
0101デフォルトの名無しさん2007/06/29(金) 19:48:07
>>100
はじめから考えなきゃだめな部分とそうでない部分がある。

まあ、とにかくはじめに検討することが大事。
0102デフォルトの名無しさん2007/06/30(土) 00:14:50
ArrayList<Integer>クラスのインスタンスをint[]クラスに代入したいのですが、どうしたらよいのでしょうか?
toArray()メソッドを使おうと考えたのですが、Integer[]クラスへの代入はできるもののint[]クラスへは代入できませんでした
0103デフォルトの名無しさん2007/06/30(土) 01:00:43
>>102
ArrayList<Integer>とint[]は一方が他方のサブクラスの関係でないので代入できない。
リストの各要素をint[]の各要素に代入したいのなら、
toArrayでInteger[]を生成したあとで、同じ要素数のint[]を作って、各要素に代入していく。
0104デフォルトの名無しさん2007/06/30(土) 01:03:39
ArrayList<Integer>から各要素を直接取り出してint[]の各要素に代入してもいいし。
0105デフォルトの名無しさん2007/06/30(土) 01:25:21
配列a[]と変数b,c,dがあったとして、

if(a[ i ] && b+c<=d)

という条件文の場合、条件を日本語を訳すと「a配列の�@番目の要素とb+cがともにd以下の場合」ということでいいんでしょうか?
0106デフォルトの名無しさん2007/06/30(土) 01:30:52
「a配列の�@番目の要素とtrueかつb+cがd以下の場合」
0107デフォルトの名無しさん2007/06/30(土) 01:31:33
×要素と
○要素が
0108デフォルトの名無しさん2007/06/30(土) 01:32:17
JAVAの通信についての質問です、お願いします。

URL url = new URL(address);
URLConnection connection = url.openConnection();
としたとしてサーバーに「GET」としてリクエストが行くと思うのですが、ヘッダーのUser-AgentがJava/1.5.0_12となっています。
ネット上のデータを取得するときに、指定したヘッダーをサーバーに送信するやりかたはあるでしょうか?

今はテストとして、http://www.cybersyndrome.net/evc.htmlをURLクラスで取得して、User-Agentの書き換えをあれこれ試してるんのですが、
URLConnectionのsetRequestPropertyなど試してもなかなかうまくいきません。

よろしくお願いします。
0109デフォルトの名無しさん2007/06/30(土) 02:16:26
>>108
setRequestPropertyはストリームを開く前にセットしないと効果がないよ。
URLConnection u = new URL(...).openConnection();
u.setRequestProperty("User-Agent", "hogehoge");
InputStream s = u.getInputStream();
こんな感じで。
もし、hogehoge Java/1.5.0_12みたいに後に元のUser-Agentが付いても構わないなら、
javaのオプションに-Dhttp.agent=hogehogeとかやるだけでいける。
0110デフォルトの名無しさん2007/06/30(土) 02:24:22
BufferedReaderクラスのreadLineメソッドで一行ずつ読み込む処理を行っているのですが,
現在まで読んだ文字数を知る方法はないでしょうか?

読み込んだ文字列の長さを足していけばいいと思ったのですが,
改行が削除されているために,改行コードがCRかCRLFかわからない場合うまく数えられないのです.
0111デフォルトの名無しさん2007/06/30(土) 02:30:11
>>110
BufferedReader#readLineではたぶん無理
一文字ずつ読んで行にまとめる処理は自分でやる
01121102007/06/30(土) 02:31:56
>>111
thx
了解です
0113デフォルトの名無しさん2007/06/30(土) 02:35:55
もし改行コードが一貫していることが分かってるなら
とりあえず最初の行末端が出るまでは一文字ずつ読んで
改行がLFかCRLFかCRかを判断したら
あとはreadLineで読んで改行の種類に応じて行ごとに文字数に1か2を足してやる手もある
01141102007/06/30(土) 02:37:43
すみません,追加で質問させてください.
BufferedReaderで現在まで読んだバイト数(現在位置)も知ることは無理でしょうか?
01151082007/06/30(土) 02:44:38
>>109
継続的にUAの改変をしたいのでプログラム中に書こうと思ってます。
試した処理が
URL url = new URL(String address);
URLConnection connection = url.openConnection(); //オブジェクト取得
connection.setRequestProperty("User-Agent", "hogehoge"); //ヘッダーセット
connection.connect(); // 接続
という風にやってます。
その後は、BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));で読み込んでreadlineでデータ読み込むとやっぱりUAがJAVAのままになってます。

ぐぐって出てくるサイトはPOST処理について書かれてるものばかりで。
URLで中身取得するだけなら、これ以上処理はないと思ってるのですが。

connect()前にヘッダー送られてるのでしょうか…
0116デフォルトの名無しさん2007/06/30(土) 02:52:28
URLConnectionの方でUser-Agentを設定してるのに
実際にデータを読むときはなんでURLからストリームを開いてるの?
0117デフォルトの名無しさん2007/06/30(土) 02:54:22
if(blp==0) i=2;
for(;i<bln;i++){

}
と
if(blp==0){
i=2;}
for(i=2;i<bln;i++){
}

は一緒の意味?
0118デフォルトの名無しさん2007/06/30(土) 02:56:18
>>114
多分無理っぽい。自分でカウントするしかなさそう。

>>115
わざわざconnectしなくてもデータを読もうとした時点で勝手に接続してくれるよ。
0119デフォルトの名無しさん2007/06/30(土) 02:58:50
>>117
blpの値によって違う
01201102007/06/30(土) 02:59:18
>>118
ありがとう.了解です.


>>113の方法でやってみることにします
0121デフォルトの名無しさん2007/06/30(土) 03:01:21
>>119
もしblpが0と1の2種類の場合、0と1でどう違うのでしょうか?
0122デフォルトの名無しさん2007/06/30(土) 03:09:07
blpが非零の時にif文が終了した時点でiに何がセットされてるか考えてみ
0123デフォルトの名無しさん2007/06/30(土) 03:10:59
>>122
実際に実行してみて分かりました!
01241082007/06/30(土) 03:15:28
>>116
ありがとうございます、UA表示が変わりました。
どうやら、本でURL先のデータ表示だけをする部分に
ttp://journal.mycom.co.jp/column/java/054/index.html
ここのヘッダー取得処理を加えたときに、ごっちゃになったようです、すみません…

>>118
私も最初はconnect()いらないんじゃないかと思ったんですが、ぐぐったときに出たサイトで
// コネクション生成(この時点では、接続されていない)
con=(HttpURLConnection) url.openConnection();
とあったので、そういうものだとばかり思ってました。

ありがとうございました、またがんばろうと思います。
0125デフォルトの名無しさん2007/06/30(土) 06:27:34
仕様書よりも馬の骨サイトの方を信用する癖は無くした方がいいよ
■ このスレッドは過去ログ倉庫に格納されています