[表示 : 全て 最新50 1-99 101-200 201-300 301-400 401-500 501-600 601-700 701-800 801-900 901-1000 2chのread.cgiへ]
Update time : 02/20 08:23 / Filesize : 263 KB / Number-of Response : 974
[このスレッドを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]


JAVAならおれに聞け!

1 名前:ビル・ジョブス mailto:sage [2005/12/27(火) 07:00:03 ]
おれはこの3年間必死にJAVAを勉強してきた。
実際クソみたいな言語仕様だが改良に改良を重ねた1.5はチト使える。
よって、まともな言語としての扱いを受けるスタートラインにやっと立ったと言える。

JDK依存した質問はバージョン明記するように。

743 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 16:41:06 ]
>>741
そういうときの為のOOPだと思うんだけど…

744 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 17:03:22 ]
ちょっとライセンス斜め読みしてみたけど、rt.jar内のクラス入れ替えってソフトウエアの改編にあたらね?
利用許諾違反になっちまわないか?


745 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 17:24:13 ]
> 743
OOPってのは、想定外の用途に対応できるような万能ツールじゃないからな。

> 744
OpenJDKを待てってことだな。

ということでOpenJDK使ってソースからビルドしなおすほうが安全かもね。

746 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 17:30:48 ]
>>745
OOはともかくとして、普通は java.io.File を改変するよりも改変せずに済ませる方法考えるけど。
配布とか保守とかの手間考えるとコスト高いし。

ってか、なんで >>741 は java.io.File 改変したかったんだろ?

747 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 19:51:38 ]
Fileに機能拡張したかったんでそ。
APIが返してくるオブジェクトにその機能が欲しかったとか。
欲しいフィールドがprivateだったとか。
まあ、privateメンバにアクセスするならリフレクション使えば問題ないが。

あとは、デフォルトコンストラクタが欲しいとかかな。
JAXBみたいに、スーパークラスにデフォルトコンストラクタがなかったら使えないようなライブラリがあるから、継承して拡張とかは意味なかったりするし。

748 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 20:17:58 ]
> privateメンバにアクセスするならリフレクション使えば問題ない
こーゆー感覚も怖いけどな。

> あとは、デフォルトコンストラクタが欲しいとかかな。
これはフレームワークが対応してりゃ 1.6で追加された
java.beans.ConstructorProperties が設定されたコンストラクタがあれば必要なくなってくかも。
まぁ、無視される可能性も高いけど。

749 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 20:32:36 ]
privateで持ってる値を見たかったらソース書き換えるかリフレクションしかないだろ。
標準APIでネイティブ関連の情報を持っていたり、フレームワークに関する重要な情報があったりすると、はっきりいってそれしか選択肢はないしな。

ConstructorPropertiesって、複合型のプロパティ指定するやつだから、デフォルトコンストラクタがないことの解決にはならんような。
5.0対応のライブラリもようやく出揃ったくらいなのに、6の機能使ったライブラリなんか皆無だな。

750 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 21:17:29 ]
> はっきりいってそれしか選択肢はないしな
private で持ってる値を見なくても良い方法を考えた方が……

> ConstructorPropertiesって、複合型のプロパティ指定するやつだから
プロパティに初期値与えられるようにするもの。
デフォルトコンストラクタ + setter/getter だけだったものが
@ConstructorProperties 付きコンストラクタ + getter でも表現できるようになるわけで。

751 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 21:53:05 ]
ブートストラップを変えればすむだろ?

752 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 22:30:11 ]
741ですが、やりたかったことはフレームワークが使用しているファイルを調査したかったから。
ソース添付してFileのコンストラクタで条件付ブレイクを張れば簡単にできるけど、
しょっちゅう呼ばれるクラスに条件付ブレークを設定するとものすごく遅くなるので、Fileのコンストラクタで
設定ファイルからファイル名を取り出して、そのファイル名でコンストラクタを呼んだときにブレイクさせたかっただけ。



753 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 22:44:05 ]
>>750
privateで持ってる値に興味があって、普通には見れないときには、ほとんどの場合ほかに手はないよ。

754 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 23:17:41 ]
>>753
private になってるって事は他人が見てはいけない/見なくてもいいはずのもの。
見ないで済む方法を考えるのが先っしょ。

755 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 23:25:39 ]
だから、見ないで済む方法がないときにどうすんのって話してんのさ。
低レベルに近かったり、フレームワークに近かったりするほど、そういうことは多々ある。
きれいごとじゃプログラム組めないよ。

756 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 23:27:01 ]
privateになってるってことは、他のクラスからも見えないってことだから、そのクラスにアクセス手段がなければリフレクションしかないってことだからな。

757 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 23:35:28 ]
>>755
> だから、見ないで済む方法がないときに
だから、>>747 はそれを確かめずにリフレクションの話してるから怖いって言ってるのさ。

758 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 00:14:35 ]
水掛け論だが754のレス先の753では「普通には見れないとき」とわざわざ断ってるわけだが。

フレームワークの機能拡張する場合には、そういう場面に遭遇することがある。
フレームワーク作者は、フレームワークを単純に利用することだけ考えがちで拡張についてはあまり考えが至らないことがあるからな。

privateになってるってことは、privateって書いたやつが「見てはいけない/見なくていいはず」と思ったというだけであって、そうではないこともある。
特に、privateのフィールドまでたどりついたときには、他に手がないことがほとんど。

759 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 00:43:11 ]
>>758
まずはフレームワークの修正が本筋で、
どうしようもない時は回避策として利用してもいいかもしれないが

でも、リフレクションとか使った拡張はあくまで回避策と認識しておくのがよいな。

760 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 00:49:12 ]
セキュリティーマネージャとかがいると、プライベートアクセスに問題があるの?

761 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 01:06:55 ]
>>753
逆に言うと、それまで 2〜3個レスがあるのに断り書きすら出てこないわけじゃん。
怖いよなぁ、やっぱり。

> そうではないこともある。
読む方が そう思わなかったというだけであって…… と言い返されたら水掛け論。
あんまし自分の能力を過信しない方が良いと思うよ。

>>760
ReflectionPermission "suppressAccessChecks" が許可されてないと、
AccessibleObject#setAccessible が SecurityException 食らう。

762 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 01:07:55 ]
×>>753>>758

763 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 02:11:51 ]
基本は拡張には開かれてて、修正には閉じられている。
個人的には、privateアクセスやfinalクラスは好きではない。
本人がそうしたくても、他人から見たらそこに有意義なコードがあれば再利用したいし、
拡張の発想なんてたくさんの人が多岐に持っていると思う。
privateやfinalにしないで、コメントで注意してね見たいなjdocタグがあればいいと思う

764 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 02:16:28 ]
>>763
たしかに!Stringやラッパークラスがfinalがゆるせない。

765 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 02:21:36 ]
注意できない奴等が引っ掻き回しやがるから利便性を捨ててでも制約をかけざるを得ないんじゃないか

766 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 02:28:29 ]
>>1
おれはこの3年間必死にJAVAを勉強してきた。
実際クソみたいな言語仕様だが改良に改良を重ねた1.5はチト使える。
よって、まともな言語としての扱いを受けるスタートラインにやっと立ったと言える。

ってあるけど、javaよりいけてる言語は?

767 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 03:28:20 ]
Q.いけてる言語は?(複数選択可)
  □JAVA ☑3年間必死に勉強してきたJAVA ☑Java □java □その他(    )

768 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 04:12:34 ]
JavaFX , Pnuts

769 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 13:12:55 ]
>> 764
Stringとかラッパークラスは、実装上しかたない部分もあるんだよ。

770 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 13:13:47 ]
誤解してるやつ多いみたいだけど、JavaFXはJava言語で使えるよ。JavaFX用の言語はJavaFXScriptだ。

771 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 13:17:36 ]
>>761
レス先に書いてあることを無視して話すすめられたら、やりとりにならんわけで。
ひとりで怖い怖い言ってればいいよ。

772 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 13:30:04 ]
マルチスレッドである変数に並列アクセスする場合、
代入、参照の先勝ち、後勝ちがどうでもいい場合でも、ロックをして同期をしなければならない?
スピードアップが求められる処理なので、なるべくロックはしたくないなと。
もっというと、javaの場合、複数ロックしたとき開放される順番がロックを書けた順番ど通りになることが保障されないから
ロックかけたくないんだよね。今回順番が大事だから。

読み込みスレッド
multiReferenceInstance = overrideInstance;

使用スレッド
operationInstance = multiReferenceInstance;
operationInstance.xxx();

Cの場合だと、確か代入でアドレス書き込み中にでも、その変数アドレスの読み込みが走って
アドレスがおかしくなるからだめだったような。


773 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 13:47:02 ]
> 複数ロックしたとき開放される順番がロックを書けた順番ど通りになることが保障されないから

保証できるロックがあったと思う
http://www-06.ibm.com/jp/developerworks/java/041112/j_j-jtp10264.html

774 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 15:33:25 ]
>>751
-Xbootclasspath/p:でいけました。

775 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 15:58:50 ]
privateアクセスで、setAccessible(true);やった後setAccessible(false);にする必要時はありますか?
影響があるのは、setAccessible(true);かけたインスタンスだけですか?



776 名前:デフォルトの名無しさん [2007/05/21(月) 16:54:18 ]
半角で-0000と入力した場合,1文字目が記号のためエラーとなる処理を行いたいのですがどうすればいいでしょうか?


777 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 17:08:21 ]
if("-0000".startsWith("-")) throw new Error("記号ではじまってるよん");

778 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 17:08:30 ]
boolean is記号(char c){
 //cが記号ならtrueを返す処理を、776のプログラムでの記号の定義に従って書く
 return c == '-';
}

void hoge(String str){
 char c = str.charAt(0);
 if(is記号(c)) throw new Exception("記号のエラー");
 //続きの処理
}

779 名前:778 mailto:sage [2007/05/21(月) 17:11:18 ]
先をこされて悔しいのでバリエーションを
if("-+/*・・・(記号の羅列)・・・".indexOf("-0000".charAt(0)) >= 0) throw new Error("記号っす");

780 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 11:17:11 ]
いやきっと>>776

> 半角で-0000と入力した場合,1文字目が記号のためエラーとなる
という方法は知っていても

> 処理を行いたいのですがどうすればいいでしょうか? 
という処理の行わせ方がわからないんだろう

つまり>>776はJavaを見たことはあるけどやったことがない新人と捉える
最適なアドバイスは「プログラムを書いてパソコンに処理を行わせればいいよ」と言うことだ

781 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 11:33:53 ]
わかった。
プロにまかせろ!
ってことか。

782 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:28:43 ]
String str = "aaa";
この場合、Stringクラスの適当なコンストラクターが呼ばれるのでしょうか?

783 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:30:57 ]
>>782
すいません。乗ってました。
String str = "abc";
は、次と同じです。


char data[] = {'a', 'b', 'c'};
String str = new String(data);


784 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 15:48:39 ]
>>783です。
上のように書いてありましたが、new String(char[]);にデバッグを張ってもとまりません。
new String(new char[]{'c', 'c'}); は止まりますが、
"bb";は止まりません。なぜでしょうか。

785 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:12:59 ]
>>784
止まるわけないよ。
だってString str = "abc";はnew String(char[])を呼んでないんだから。
コンスタントプールから"abc"のエントリーを取り出しているだけ。
"abc"のインスタンスが無いときにどう生成するかはVMの実装次第。
Stringをnewして<init>をinvokespecialするString str = new String(data);と違って、
String str = "abc";はldcしているだけ。

786 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 18:42:05 ]
>>785
ありがとうございます。
コンスタントプールはJDKにはなかったですが、標準クラスではないのでしょうか?
あとldcってなんですか?

787 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 19:15:28 ]
>>786
コンスタントプールってのは、クラスファイルとかVMの方の用語だ。

ldc は定数をロードする JVM のインストラクション。LoaD Constant かな?

788 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 20:02:13 ]
Stringのような不変クラスは、中身書き換えられる心配ないから
インスタンス使い回しをした方が効率いいから使い回せるもんは使い回してる、と。

789 名前:デフォルトの名無しさん mailto:sage [2007/05/23(水) 20:09:54 ]
>>786
詳しくはJava VM仕様を。
でも、仕様文書そのものよりも、それを解説しているものがあれば、その方が理解しやすいとは思う。
String str = "abc";とかString str = new String(data);が、どうコンパイルされたかは、
クラスファイル名がHoge.classならjavap -c Hogeとやれば生成されたバイトコードが見られるから、
シンプルなプログラムを書いてみて、バイトコードを比較してみれば違いが分かる。

790 名前:デフォルトの名無しさん mailto:sage [2007/05/24(木) 10:14:01 ]
>>789
確かにnewと""ではコードが違いました。""の時クラスファイル内部ではnewしていなかったので、
VMが何らかの方法でStringを生成して、ldcでプッシュしているって感じですかね。
リテラルからのStringクラス生成は、VMレベルなので、ブートストラップを変更しても制御できそうにもないですね
っと、とりあえず自分で考えた結論ですがあっているでしょうか。

791 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 13:46:26 ]
>>790
そんな認識でいいんじゃない。

792 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 15:39:50 ]
xml文章のある要素を取得したタイミングで、スタックとレースをダンプしたいと考えています。
javaのxml処理について調べました。おかしい点があれば指摘していただけないでしょうか。

・読み込み向けはsax、更新する場合はdomと、jdkでは2つのインターフェースを定義している。
・sax、domを実装したモジュールが各ベンダーから配られている。
 基本、すべてのベンダーはsax、domを実装している。
・jakartaなどのxml関連ライブラリも、sax、domAIPを利用(拡張実装もあり)している。
・なので、ブートストラップでNodeクラスを変更したクラスにパスを通し、値をセットするときのコードを変更し、
 xxだったらトレースをダンプするコードを書けば、
 目的の要素をどこのクラスから読み込んでいるかを追うことが出来る。

793 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 15:54:53 ]
>>792
要素を取得したタイミングをいうより、
ある要素を処理するタイミングという訳ね。

静的な解析手法でなくてよいのだったら、
eclipseなんかのデバッガで、DOM,SAMの実装クラスの要素処理のコードの所で
ブレイクポイント置いてそこで止めてみては?

794 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 16:38:50 ]
だれか助けてください!!
jdbやeclipseのデバッグ、その他なんでもかまいませんが、
あるインスタンスを参照している箇所(ソースの行数またはクラス名のみでも可)をリストアップすることはできるでしょうか?

795 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:14:28 ]
classの参照って、普通にeclipseで見られなかったっけ?

796 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:35:48 ]
>>795
String hoge = "hoge";
bean1.setString(hoge);
bean2.setString(hoge);
bean3.setString(hoge);
としたときに、
このローカル変数のhogeの参照サーチってやると、
bean1、bean2、bean3って出てくることを望んでます。
そんなことできましたっけ?

797 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:46:55 ]
>>792
読み込み・書き込みの違いじゃなくて、saxは1タグ・1属性ごとのコールバック処理、domは全部一気に取得してDOMツリーを扱う、という違いです。
実装てきには、DOMはSAXを使って読み込みをしたXMLツリーの全体をDOMオブジェクトとして返すという感じです。

そのため、DOMの場合はすべてのタグが対応したちゃんとした形のものしか読めません。不完全なXMLファイルを読み込んで正常部分だけは処理したいなどという場合にはDOMは使えません。
あるタグを読み込んだ時点で処理を行うということはできません。
一方SAXはコールバック形式でプログラムを組むので、複雑なプログラムを書く必要があります。

で、その欠点を補ったStAXというライブラリがJavaSE6から追加されています。
StAXは逐次読み込み/書き込みを行うライブラリですが、プログラムが組みやすい形式になっています。
対応ライブラリを使えばJava2SE5.0以前でも使えます。

ということで、今回の件ではStAXをオススメします。

他に、JavaにはJavaBeansとXMLの相互変換を行うJAXBというライブラリもあります。
XMLファイルの中身にあまりこだわらず、データとしてJavaに取り込みたいという場合には非常に楽です。

798 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 11:40:09 ]
>>792
プロファイラー使ったことないけど、プロファイラーならトレースが出ると思うし追えるんじゃん
プロファイラー自体がどのような技術で実現しているのかわからないけど
メソッドをトレースするからjavaエンジンレベルで何かしているのだろうね。

799 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 15:50:06 ]
>>740
これって、seasarのクラスローダーを使うではなく、seaser自体使えってことですよね。
HotdeployClassLoaderを見ましたがNamingConventionみたいな物を使っていて・・・
結局javaはクラスを明示的にアンロードする仕組みがないから、
再ロードしやすくなる規約を作らないとできないってことですかね。
ここにいろいろ書いてありましたが。
ttp://www.nminoru.jp/~nminoru/java/class_unloading.html

800 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 10:55:13 ]
メソッドの引数はローカルスコープでしか有効でないので、
ローカル変数みたいに値を代入したりしても問題ないですよね?

xx(String str) {
str = str.toUpper();
.
.
}

801 名前:デフォルトの名無しさん [2007/06/01(金) 11:03:38 ]
おk

802 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 14:58:11 ]
>>800
言語仕様的には問題ないけど、
たまにコーディングルールで禁止とか非推奨な場合もあるから気をつけた方が良いかも。

803 名前:デフォルトの名無しさん [2007/06/05(火) 01:12:03 ]
JavaでWebアプリ作った場合、一般的にFullGCかかる頻度って
どの程度が理想的なんでしょうか?
根拠はないけれど10分くらい?

804 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 01:17:16 ]
アプリによる。以上。

805 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 10:26:12 ]
jadでデコンパイルできますが、行数が元のソースと合いません。
そのため、eclipseのjadエディターでブレイクポイントを指定しても、同期が正しくない状態で止まります。
行数が元のソースと同じ状態で出コンパイルすることはできないでしょうか。
またはメソッドを定義している行数だけでも知る方法はないでしょか?

806 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 11:15:34 ]
リフレクションでprivateにアクセスすることはできましたが、
finalのフィールドを変更することはできないでしょうか。

807 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 11:29:17 ]
>>805
むり

808 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 15:55:27 ]
URLクラスのメモリ用なんてありますか?

new URL("mem://xxx");

よくフレームワークで、リソースをストリームではなくURLのみで受け付けるものがあり、
ByteArrayOutputStreamの場合、一度ファイルに書き込まなければならないので
そこを何とかしたいです。

809 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 16:26:56 ]
>>808
無理。

ファイル作りたくないだけなら、FTPサーバかHTTPサーバになりすまして
そのURL渡す方法もあるけど、ファイル作るよりよほど手間かかるぞ。

810 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 16:36:01 ]
>>806
finalはコンパイル時に実値に置き換えられるから、無理
たとえば
class A{
 public static final int a = 5;
}
があるとき
class B{
 void a(){ System.out.println(A.a); }
}

class B{
 void a(){ System.out.println(5); }
}
としてコンパイルされる。
その後a=10としてclass Aだけをコンパイルすると、class Bではa=5の値が使われ続ける。

811 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 18:49:52 ]
>>808
ここはム板だ。無ければ作ればいい。
URLで指定して読み込みたいんだから、そのURLを開いて得られるストリームは、
ByteArrayOutputStreamでなくてByteArrayInputStreamでいいんだよね?
必要ならByteArrayOutputStreamをパイプ入力ストリームに繋げばいいし。

class MemURLStreamHandlerFactory implements URLStreamHandlerFactory {
public URLStreamHandler createURLStreamHandler(String protocol) {
if (protocol.equals("mem")) return new MemURLStreamHandler();
else return null;
}
}
みたいなファクトリを作ってURL#setURLStreamHandlerFactoryでセット。
URLStreamHandlerを継承したMemURLStreamHandler内でopenConnection(URL)を実装して、
URLConnectionを継承したMemURLConnectionを返すようにする。
MemURLConnectionのgetInputStream()で該当するByteArrayInputStreamを返してやるように実装する。
おおまかにはこれで、
InputStream in = new URL("mem:").openStream();
みたいにしてデータを読み込めるようになるので、
URLとしてnew URL("mem:")を、そのフレームワークに渡してやればいい。
まあ、どのストリームを返すかをURL表記でどう表現するかとか、
それを解釈して実際のストリームにどう関連付けるかとか、細かな実装はがんばってみてくれ。
決まったByteArrayInputStreamを返すURLならプロトコルの"mem:"だけでいいし実装も簡単だ。

812 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 19:12:42 ]
URL#setURLStreamHandlerFactoryの呼び出しはJVM動作中1回だけなので注意して。

813 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 15:46:46 ]
>>811
できました。
ありがとうございます。
URLがfinalだったので、これはどうしようもないと思っていたのですが、
こんな機構が用意されていたのですね。

814 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 15:46:47 ]
while (1000回) {
 "xxx".replaceAll("xxx","yyy");
}
この場合、無駄に正規表現のコンパイル処理が走るので、
コンパイルしたMatcherでreplaceしたほうが、処理が早くなるでしょうか?
実際試しましたが、ほとんどかわりはなかったですが・・・


815 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 16:08:42 ]
>>814
1000回くらいでは差があまり見えないのでは?
int i = 100000;
long a = System.currentTimeMillis();
while (--i > 0) {
"xxx".replaceAll("xxx","yyy");
}
System.out.println(System.currentTimeMillis() - a);

int i = 100000;
long a = System.currentTimeMillis();
java.util.regex.Pattern p = java.util.regex.Pattern.compile("xxx");
while (--i > 0) {
p.matcher("xxx").replaceAll("yyy");
}
System.out.println(System.currentTimeMillis() - a);

int i = 100000;
long a = System.currentTimeMillis();
java.util.regex.Matcher m = java.util.regex.Pattern.compile("xxx").matcher("");
while (--i > 0) {
m.reset("xxx").replaceAll("yyy");
}
System.out.println(System.currentTimeMillis() - a);
だと、1番目は2,3番目より時間かかるね。2,3番目はあまり違わない。わずかに3番目が速いか?
コンパイラやVMでの最適化の関係もあって正確な測定ではないけれど。
実際に扱うデータ量で測定してみてあまり変わらないのであれば、記述の分かりやすさを選べばいいと思う。

816 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 15:43:28 ]
>>815
ありがとうございます。
100000回くらいで差が出てくるほどでした。

Pattern#flags()でフラグのセットが返りますが、Pattern.DOTALLが含まれているかの確認はどうすればよいのでしょうか。
Cでビット演算はしたことがあったのですが、忘れてしまいました。

817 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 15:57:46 ]
(Pattern#flags() & Pattern.DOTALL) != 0

818 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 07:34:39 ]
>>814
気にするほど遅いならばそのメソッド自体が提供されていないと思う。

819 名前:デフォルトの名無しさん [2007/06/17(日) 14:34:08 ]
符号無し演算のオーバーフロー判定ってどうやるの?
具体的には、文字列からintへの変換で、"0xffffffff"は
OKだけど、"0x7ffffffff"はNGって扱いたいんです。

resultが前の桁を適用した結果、
digitが今回の桁の値だとして、

Cみたいに符号無しの比較が出来れば
unsigned value = (result * radix) + digit;
if (value <= result) {
  // オーバーフロー
}
こう書けるんだけど。

先に右シフトして桁を落としてやる以外に思いつかない・・・。
if ((((result >>> 16) * radix) + digit) >= (1 << 16)) {
  // オーバーフロー
}

820 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 16:32:16 ]
>>819

要件がよくわからんけど、こんなのじゃ駄目?

String str = "0x7FFFFFFFF";
int value = 0;
try {
  value = Integer.decode(str).intValue();
} catch (NumberFormatException nfe) {
  //オーバーフローやフォーマット不正
}


821 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 17:42:59 ]
>>819
桁読み込んだ後に、result の更新と判定の順番変えて

digit = .....; //一桁読み込み
if (0xFFFFFFF < result) {
  // オーバーフロー
}
result = (result * radix) + digit;

822 名前:819 mailto:sage [2007/06/18(月) 07:53:06 ]
自己解決しました。

glibcのソースやら何やら眺めてたら、
基数毎にこれ以上桁増やしたら必ずオーバーフローする
限界値を計算しておいて確認する以外は無理っぽいです。

>>820
decode()じゃ結局parseInt()と同じなので、
0x80000000以降がオーバーフローしちゃうんです。

よくよく考えてみると、符号無し演算が可能でも、
>unsigned value = (result * radix) + digit;
>if (value <= result) {
これで判定出来ないケースがあるんですね。

823 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 18:25:35 ]
1.4でコンパイルしたクラスを、1.5のエンジンで実行させることはできるのでしょうか。
jakartaなどのライブラリのダウンロードで、JDKのバージョンが乗っていないので動くような気がするのですが。
試せば早いのですが、モデム環境なので1.5のダウンロードが・・・

ちなみに、javaのエンジン(ランタイム?)としてbeaが出しているjrokectなるものがありますが、
仕様はsunが提示したものにのっとっているので、使う側としてはsunとbeaどちらを使用しても正しく動作するけど
処理が早い、遅いの差があるから、好きなのを選んでよいですよって感じなのでしょうか?

824 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 19:12:06 ]
> 1.4でコンパイルしたクラスを、1.5のエンジンで実行させることはできるのでしょうか。
できる。

825 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 19:49:58 ]
>>823
>好きなのを選んでよいですよって感じなのでしょうか?
よいですよ

826 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 10:12:12 ]
>>824
>>825
ありがとうございます。
たすかりました。

827 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 14:34:47 ]
>>824
実行できましたが、実行が恐ろしく遅いです。
ただ、任意の処理の2回目からは通常通りのスピードなので、
おそらくクラスをロードするときに時間がかかるものなのでしょうか?


828 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 15:09:40 ]
ファイルのエンコードがEUCかSJISかを判断してから、そのエンコードでファイルを読み込みたいのですが、
ファイルのエンコードを判断する方法がわかりません。
そうすれば判断できるでしょうか。

イメージはUNIXのnkfのように、ユーザーに元のエンコードを意識させず、
特定のエンコードでデータを取得させたいのですが

829 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 15:11:18 ]
>>827
Hotspot というキーワードと
JIT というキーワードでググってみるといいかもしれない。
後は、クラスのローディングコストに興味があれば Class Data Sharingとか。

830 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 15:12:53 ]
>>828
つ ttp://www.void.in/wiki/Universalchardet

831 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 15:49:43 ]
>>828
JISAutoDetect

832 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 16:28:18 ]
>>830
ありがとうございます。
JDK1.4なのですが、実行すると5.0をサポートしていないというようなエラーが出ました。

java.lang.UnsupportedClassVersionError: org/mozilla/universalchardet/UniversalDetector (Unsupported major.minor version 50.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at other.Free.main(Free.java:37)

833 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 17:37:43 ]
普通にJISAutoDetectじゃだめなん?

834 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 23:03:03 ]
>>832
ClassVersion 50.0 だから 5.0 とは違う。
ClassVersion 50.0 って Sun の JDK だと 1.6 が吐く奴だっけか?

835 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 10:13:19 ]
>>829
ありがとうございます。
調べて見ます

836 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 13:17:19 ]
IMAPでメール受信できるクラスありますか?

837 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:42:12 ]
commonsのNetというパッケージにPOP3Clientクラスがあり、これにより簡単にメールを受信することができました。
但し、メール情報の戻り値がReaderで、ヘッダーを含む生のデータとして出しか取得できません。
受信メールのバイトデータから本文やヘッダーを取得できるクラスはJDKのAPIにあるでしょうか?

838 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:49:53 ]
JavaMail

839 名前:デフォルトの名無しさん [2007/06/22(金) 21:32:52 ]
HATS(IBMの製品。HostPublisherの後継。)を使って、ホスト(PL/I)画面
の見かけだけをWeb化し、JSP化しようと思います。
この時、ホスト画面で「入力不可のテキストボックス」になっていて次画面
に値が引き継がれるものは、HATSで変換した後もやはり「入力不可のテキス
トボックス」になってしまうのでしょうか?例えば、Web化した時に、
<input type="text" value="次画面に引き継がれる値" disabled>
となってしまうと、ユーザがインターネット一時ファイル内の「次画面に
引き継がれる値」の部分を改竄してしまうことを懸念しているのです。
ホスト用のエミュレーターで、「次画面に引き継がれる値」の部分が保存
されるなら良いのですが、どなたかお分かりでしょうか?

840 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 09:23:47 ]
それはHATSの人に聞くしかないだろ

841 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 15:40:43 ]
>>831
まさにこれでした。
ありがとうございます。

842 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 14:41:28 ]
>>839
そういう金がかかってる製品の細かいトコを
掲示板で解決できると思うセンスはやばいです

843 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 16:29:21 ]
Serializableを実装する場合、serialversionUIDを実装しないと何が問題になるのでしょうか?
実装しなくても処理は正常に動いています。


[ 続きを読む ] / [ 携帯版 ]

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

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) ...の不正改造版アヒャーリ
担当:Smilegreen