[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/09 12:44 / Filesize : 104 KB / Number-of Response : 411
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 23:47:15 ]
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    pc11.2ch.net/hp/
Webプログラミング pc11.2ch.net/php/
をご利用下さい。

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

前スレッド
【初心者】Java質問・相談スレッド129【歓迎】
pc12.2ch.net/test/read.cgi/tech/1247322478/
次スレは>>990あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
www.wikiroom.com/java/

361 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:08:33 ]
テキストファイルを1行読み込んだら、読み込んだデータをテキストを処理するクラスに渡す
という作業をループを使用して実装したいと考えています。
速度向上のためにテキストを処理するクラスはThreadを継承しようと考えています。
しかし、IOの方が遅いので行を読み込み終る前にテキストを処理するスレッドが終了してしまいます
どうにかして、勝手におわらせないようにしたいのですが
どのようにすればいいのでしょうか?

362 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:12:20 ]
1行1スレッドという発想は神ですね。
感動しました。

363 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:18:35 ]
>>362
煽るの好きだな

364 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:21:59 ]
>>361
つBlockingQueue

365 名前:361 mailto:sage [2009/08/09(日) 19:29:12 ]
>>364
ありがとうございます。
早速ググってみます

366 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:46:02 ]
final String str = "str";str = "STR";はダメなのに
final ArrayList<String> list = new ArrayList<String>();list.add(str);
は問題なくadd()出きるのですか?

367 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 19:54:55 ]
Java には代入とメソッドの区別ができるから

368 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 20:04:11 ]
>>366
final はオブジェクトの参照そのものが変化しないことを要求するだけ。
String への代入は参照そのものが変化するから×
list.add は list への参照そのものは変化しないから○

369 名前:366 mailto:sage [2009/08/09(日) 20:06:49 ]
>>367-368
非常に参考になりました。ありがとうございます



370 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 20:30:23 ]
>>366
finalが制限するのは、変数とオブジェクトの結び付きだけなので、オブジェクト自身に対する操作には影響しない。
絶対切れない紐の先に犬を結び付けたら別の犬に取り替えることはできないけど、犬がモノを食っても紐の種類には関係ない。

371 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 21:53:02 ]
1つのメインのクラスから、色々なクラスをよぶとき、
クラス図はどう表現すればよいのでしょうか?
1つのメインになるクラスから、使用しているクラスに矢印をひっぱるのでしょうか?

372 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 22:03:19 ]
アノテーションについて質問です。
アノテーションはあくまでクラス(Class<?>)が持つもので
例えば
class Hoge {
 @Anno
 Integer i;
}
Hoge h = new Hoge();
としたとき
h.iからそのフィールドに付いてる@Annoを取得(h.getDeclaredFields()してFieldを取得することなく)することはできないという認識でよいのでしょうか?

373 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 22:23:59 ]
>>371
適当にやじるし引っ張っとけ。
あってもいないし間違ってもいないし、理解もしていない。

>>372
正しい。h.iは単なるInteger型の参照でそれからは情報を取ることはできない。
Hogeのクラス情報(h.getClass, Hoge.class)から取得する。
ちなみに、アノテーションはRuntime属性にしておかなければ実行時には情報がなくなるので注意されたし

374 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 22:37:45 ]
アノテーションって何が出来るのですか

375 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 22:38:23 ]
>>373
アノテーションの意味的には取得できてもよさそうなものですが、やはり無理なのですね。
ありがとうございます。

376 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 22:46:24 ]
>374
一言で言えばフィールドやメソッドにラベルを付けられる
ラベルが付いているか付いていないかでIDEやフレームワークが「なにか」をするかもしれない

>375
いやできないのが自然だろう。
アノテーションは商品の値札のようなもの。
値札はパッケージや陳列棚にはつけるが、商品そのものには付けない
が、他の店で等々の品はある。

377 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 22:51:09 ]
javaにはRTTIがないから>>372の動作が自然だと思ってたんだが>>375はなんでそう思うの?

378 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 22:52:00 ]
>>371
それは依存なので破線の矢印で表す。
矢印の方向はそれであってる。

379 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 23:00:58 ]
@deprecateは取り消し線が付いて有益だと思う
@supressは黄色いびっくりwarningが消えるので有益
他に何かある?



380 名前:>>375 mailto:sage [2009/08/09(日) 23:07:10 ]
>>376-377
考えがかなり浅かったようです。
>>376の例を考えると納得でした。

勉強になりました。重ねてお礼を申し上げます。

381 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 05:15:08 ]
株やFXの業者サイトを開くと有名なjavaのマークの周りを■がぐるぐる回るアイコンが表示され
その後チャートなどが表示されますが、あれは「JAVAで作成されたプログラム準備中」という意味でしょか?


382 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 12:12:04 ]
BlockingQueueを教えてもらった者ですが、確認させていただきます
BlockingQuequeに何も無くなったら、
自分自身(BlockingQueque)があるスレッドを自分自身で止めるということでいいんですよね?

383 名前:デフォルトの名無しさん [2009/08/10(月) 12:20:40 ]
>>374
DI

384 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 13:00:29 ]
ファイル読込で、BufferedReaderとInputStreamReaderを使用すると読み込むことは可能ですが、UTF8に変換されるのが困ってます。

SJIS読込→UTF8となって後の処理 SJISファイル出力でファイルを出力すると一部文字が文字化けしてしまいます。

これを解決するために、SJISファイルを読み込んで、内部的にもSJISの状態を保持して読み込むことは可能でしょうか?



385 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 13:03:54 ]
>>382
自分自身(BlockingQueque)があるスレッド、などというものは存在しないよ
BlockingQueue自身はスレッドを持っていない
止めるのは要素を取り出そうとした(takeを呼び出した)スレッド
あとついでに、満杯のキューにputしようとしたスレッドも空きが出来るまで止められる

386 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 13:08:37 ]
>>384
そもそもInputStreamReaderというのは、byte(バイト)をchar(Unicode文字)に変換するためのクラス
変換を通さずInputStreamから直にbyteを読み取ってOutputStreamに出力すればよいのでは

387 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 13:20:19 ]
>>386

やっぱりそうなりますよねぇ。
一行読込とかやりたかったんだけど、自前で組むしかなさそうですねぇ。

サンクスです。

388 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 13:23:32 ]
if(objFrm.get("idno")!=null && !objFrm.get("idno").equals("")){
このときに、!=nullはヌルじゃないを検査して、
!objFrm.get("idno").equals("")もヌルじゃないを検査しているのですけど
どうして2回繰り返すのでしょうか。

389 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 13:24:39 ]
s-jisのreader使って一行読み込んで,s-jisのwriter使ってoutputstreamに書き込めばいいんでない?



390 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 13:25:51 ]
ちゃんと読まなかった結果がこれだよ…

391 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 13:29:58 ]
>>384
もしかして "SJIS" じゃなくて "Windows-31j" とか "MS932" を指定すると上手く動いたりしないだろうか

392 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 13:31:17 ]
>>388
null と "" は別のものなので、2個チェックする必要があります

393 名前:382 mailto:sage [2009/08/10(月) 13:33:58 ]
>>385
わかりました、ありがとうございます

394 名前:デフォルトの名無しさん [2009/08/10(月) 13:43:53 ]
>>384

"Windows-31j" と"MS932"は、試してみましたがだめでした。

2chのスレッド内容を取得しようと思ったんですけど、httpHeaderに設定されている「content-length」の値と
SJIS→UTF8→SJISファイル出力で取得したbyte長が異なるので困ってます。

うーんいい方法はないのかなぁ。


395 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 13:53:40 ]
>>394
改行コードの問題とかはない?
readLineは\nでも\rでも\r\nでも改行扱いするはずだけど、出力してる改行コードが元と違うとか
具体的に何がどう変わってるのか、バイナリダンプかなんかで比較して調べるべきかと

396 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:19:09 ]
>>387
>一行読込とかやりたかったんだけど
ttp://commons.apache.org/io/api-release/
こういうのがありますが、使えませんか?


397 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:27:35 ]
>>394
やりたいこととやってることが微妙に合っていないように聞こえるが。
2chのhtmlが文字列だからといって、Reader/Writerを使わなければならない訳じゃない。
そもそもContentLengthはhttpのボディ部が”バイナリとして”何バイトあるかを示しているはずだ。
だからReader/Writerじゃなく、InputReader/Writerでバイナリのままファイルに落とせ。

398 名前:397 mailto:sage [2009/08/10(月) 14:29:48 ]
>>397
ごめ、イキオイで間違った。
>inputRaeader/Writer
じゃなくて
InputStream/OutputStream


399 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:45:36 ]
>>396

ディレクトリ操作とか便利そうですが、今回のファイル入出力に関してはちょっと用途が違うなと思いました。

>>397,398

やっぱしstreamでI/Oするのがスマートそうですね。
ちょっと実装してみます。



400 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:46:08 ]
>>394
>「content-length」の値と
>SJIS→UTF8→SJISファイル出力で取得したbyte長が異なるので困ってます。
content-lengthの事を書いているのを見ると、差分データを取りに行きたいんでしょ?
スレッド番号.infoみたいなのを作ってレスポンスヘッダからconect-lengthの値を取得して、
<content-length>数値</content-length>とかやった方がいいと思うんだけど。

401 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:46:16 ]
>>394

改行コードは問題ありませんでした。LFなので特に困ってないです。


402 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:49:46 ]
>>400

ご名答。
ずばり2chスレッドの差分データを取得するために、content-lengthの値を設定したいのですが、思った通りに値を設定できなくて四苦八苦してます。

ちょっと悩んでみます。

403 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:51:37 ]
うるさい

404 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:52:42 ]
むしろHTTPなら java.net.HttpURLConnection とか import java.net.URL でまかなえるのでは

405 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 15:01:25 ]
>>402
自分で全体から一部を取り出さなくても、”新着レスの表示”リンクを見れば
URLにちょっと書くだけで差分が送られてくることが分かるだろ

全体を得たとしても、htmlを良く見ればレスがdat落ちと似た形式で一行毎になっているのが確認できるはずだ。
その部分を抜き出せば、レスの件数=行数。差分も得やすくなるだろ。

406 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 15:02:19 ]
受信した生データはいったんそのままStreamでファイルに保存しておいて、
あらためてファイルからReaderで1行ずつ読み込めばいい

407 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 15:23:52 ]
>>402
>>404 にも書いてある通りHttpURLConnection 使った方がいいと思うな
www.fk.urban.ne.jp/home/kishida/kouza/kishou/14net.html
てか、content-lengthを取得できないっってことはe-tagも取得できていないでしょ?
サーバに必要なデータを送らないと、ちゃんとデータを送り返してくれないような気がする
差分データはステータスコードを気にしながらコードを書かないいけないので注意

408 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 15:28:35 ]
>>405

それがdatファイルの扱いに関しては簡単ではないんです。

>>406,407

初回は、HttpURLConnectionで取得しているのですが2回目以降は、最初に取得した情報をファイルに出力しておいて
ファイルの差分をHttpURLConnectionで問い合わせようとしています。
そこで、content-lengthが重要になってくるんです。

javaじゃなければ簡単に処理できんだけど、なんでUTF8以外を扱おうとするとおかしくなるんだろ。


409 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 15:32:26 ]
>>392 ありがとうございました。



410 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 15:48:57 ]
>>408

とりあえず、初回読込はネットから取得してSJISファイル保存。
2回目以降のアクセスは、さきほどのファイルからbyteを取得して、ネットから差分取得でうまくいきました。

ありがとうございます。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<104KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef