あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

java

java.nio.ByteBuffer

ByteBuffer は便利 DataInputStream の readFully みたいに指定サイズを Byte バッファに読み込んで ByteBuffer にして返すメソッド。 この時のデータはリトルエンディアン import java.nio.{ByteBuffer,ByteOrder} ..snip.. def read[S

Ant で FindBugs のチェックを行う。

build.xml に findbugs の設定をしてソースコードのバグパターンチェックを行う。 .. <taskdef name="findbugs" classpath="lib/findbugs-ant.jar" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"/> ... <target name="findbugs" depends="make"> </target></taskdef>

双方向のBiMap

ImmutableBiMap の inverse メソッドを使用してキーと値を反転させて値からキーも取得できる。 import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.BiMap; ..snip.. private static final BiMap<Integer,String> bimap = ImmutableBiMap.of</integer,string>…

Google guava-libraries の Function Predicate Joiner

Function Function で List の要素を変換して、ループの記述無しで新しい List を作成する。 変換する条件は Function の applyメソッドに記述する。 import java.util.List; import com.google.common.base.Function; import com.google.common.base.Joiner…

テンポラリファイル作成

java でテンポラリファイルを作成してくれるメソッドがあった。 File#createTempFile 指定ディレクトリで新しい空のファイルを生成する。 そのファイル名には引数で指定した接頭辞、接尾辞が使用される。 このメソッドが正常に復帰する場合、以下が保証され…

ちょっとだけ気になったこと

同パッケージ内の他の class の static 定数の参照 通常、他の class の static 定数(final 変数)を参照する場合は class名.定数名 ですが同パッケージ内にある他の class の static 定数を参照する場合は class 名の指定がなくてもコンパイルエラーにならな…

FindBugs の @NonNull @CheckForNull アノテーション

FindBugs の @NonNull アノテーションで引数や戻り値が null でないことを明示すると、可読性もよくなるし、間違って null の引数を指定したり、null を返すコードを書くと、FindBugs の指摘が入るので、不要な null チェックの冗長なコードが減少する。 imp…

guava-libraries の型推論してくれるファクトリメソッド

java JDK 6でジェネリクスの要素をもつコレクションの生成は長ったらしく冗長。 import java.util.ArrayList; import java.util.List; import java.util.HashMap; import java.util.Map; .. final List<String> list = new ArrayList<String>(); final Map<String, Integer> map = new HashMap<String, Integer></string,></string,></string></string>…

immutable コレクション

Google の guava-libraries の 不変(immutable)なコレクション。 普通に HashMap 等を使うほうが簡単だがオブジェクトの状態が変わらないので、 状態に依存しないコレクション操作ができて、状態の変化によるバグを防止できる。 複数のオブジェクトで同じコ…

XMLのスキーマ変換中に発生した ConcurrentModificationException

昨日 trang を使った時に発生した ConcurrentModificationException は いっしょに ダウンロードしたソースファイル(src.zip)を見てみると com/thaiopensource/relaxng/input/xml/Inferrer.java 内にある 下の拡張 for 文(for (Name elementName : outputQue…

XMLスキーマ変換ツール trang を使ってみた。

スキーマの種別は指定する拡張子で判断してくれるようだ。 比較的単純な XML だと問題なくスキーマを作成してくれたが 巨大で複雑な(1500行くらいある)XMLを指定すると、ConcurrentModificationException が発生した。 $ java -jar trang.jar foobar.xml foo…

Tuple を使う

本格的に仕事で Scala を使用することはないのですが、Java のプログラム内で scala の Tuple を使ったりしています。 値を保持するだけのために新規クラスなんかを作成する必要が なくなり結構、便利です。 import scala.Tuple3; .. private Tuple3<String,Integer,Boolean> getData</string,integer,boolean>…

から [Ruby] へ..

RubyはJavaより生産性が高い故に、JavaからRubyに移行するのでしょうか 果たして、本当にRubyの生産性は高いのでしょうか? 2008/03/25 Rubyの「生産性10倍」とか「プログラミングが面白くなる」とかの宣伝 2007/11/12 JavaとRubyの間にある、ベルリンの壁 20…

Runtime.exec

悩まされていたjavaアプリケーションのメモリエラーは、javaアプリケーションから外部コマンドを実行するために使用していたRuntime.exec() に原因があることがわかった。 これは、動作環境が unix 系 (使用していたのは Linux ) の場合に起こるようです。Ru…

jconsole

javaアプリケーションのメモリエラーに悩まされていたので リソースチェックや監視ツールを調べていてjconsoleという監視ツールがあるのを知りました。 これは、j2SE5.0からデフォルトで付属するようになったJMX準拠の監視ツールです。 javaアプリケーション…

debug

System.out.println( (new Exception()).getStackTrace()[1].toString() ); デバッグ時はこれで、どこから呼ばれているかがわかる。

java GUI アプリケーション

2〜3年前に作りかけていたSWTアプリケーションを最近見つけた。その頃にSWTを知り、これからのjava GUIがおもしろいかもとXMLエディターもどきをつくりかけていたのを思い出した。 本業がいそがしくなり、中断したままになっていた。 また、いじりたくなり…

エンコードチェック

ブラウザ等で入力された文字列がシステムでエンコード可能かどうかチェックする処理 必要になったので調べてみました。 import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; /** * 文字列がエンコード可能かどうかチェックする * @pa…

SCJP試験情報1

最近、べンダー主催のjavaの認定試験 SCJP(Sun Certified Programmer for the Java 2 Platform)について社内から問い合わせがあった。わたしが受験したのは、確か、2年半ぐらい前で、SCJPの1.2を受験して、みごと一発で合格したのでした。(←結局、自慢か?…

J2SE5.0のenum型 その2

J2SE5.0のenum型は、if文で直接、整数値と比較するとコンパイルエラーとなりますが、switch文では、使用可能です。 ... public enum Hoge { HOGE, BOOK, NOTE, PEN }; public boolean isPaper( Hoge hoge ) { switch ( hoge ) { case BOOK: case NOTE: retur…

J2SE5.0のstatic import

javaで定数を使う時は、使用する定数が定義されているクラス又はインタフェースのパッケージをimportします。そしてクラス名.定数名として使用が可能になります。クラス名が長いと、ソースが見づらいし、記述も煩わしくなります。 J2SE5.0では定数名だけの記…

J2SE5.0のenum型

J2SE5.0より前のjavaでは、定数は public static final int HOGE = 1; public static final int HOGEHOGE = 2; などとしていました。この場合の問題は、定数がただのint型ということです。この定数を使用するメソッドは、HOGEでも、ただの1でも型(int)として…

Servlet サーバへのファイルアップロード

クライアントからサーバへのファイルの送信(ファイルアップロード)

Servlet サーバからのファイルダウンロード

サーバからクライアントへのファイルの送信(ファイルダウンロード)

OutOfMemoryError発生

連続動作のテストを、まる1日やっていると、200件目ぐらいでOutOfMemoryError が発生し、それ以降、メモリ不足で、処理ができなくなってしまった。対応としては、 使用していない無駄なメンバーフィールドやメソッド変数、バッファがないかチェックして、あ…

java.util.ObservableのaddObserver()メソッド

開発中のプログラムで、既に登録済みのObserverを、addObserver()メソッドで再度、登録する部分を、発見して、修正しようかと思ったが、既にテストフェーズなので、問題なければ修正はしたくない。 修正しなくとも問題ないか、java の Observableクラスのソ…

javadocを活用して内部仕様書を作成

javadocを意識して、コメントを入れているが、規約に含まれていないので、内部仕様書として、javadocを活用できていない。各自の意識で、javadocを意識したコメント記述があったり、なかったりなので、javadocを利用して、内部仕様書を、ちゃんと出力できな…

debianの jav GUI アプリケーション(AWT/Swing)の日本語表示

debianでjava GUI アプリケーション(AWT/Swing)を起動すると、日本語が文字化けします。

JDK5.0(Tiger)の日本語ドキュメント

http://java.sun.com/j2se/1.5.0/ja/docs/ja/index.html JDK5.0 外部バージョン番号が 5.0 で、内部バージョン番号は 1.5.0です。 で、通称は、JDK5.0。言語仕様も拡張されています。 (2004年9月30日 J2SE 5.0 FCS リリース) Java 2 Platform Standard Editi…

ServerSocketのコンストラクタで、最大接続数を指定

ServerSocketのコンストラクタで、最大接続数を指定できる。 public SeverSoctet( int ポート番号, int バックログ); ポート番号...指定するポートのサーバソケットを作る。ポート番号0を指定すると、空いている適当なポート番号のサーバソケットを作成する…