Java 一覧

String#split(String regex)について

  • 更新日:
  • Java

CSVファイルからデータを取り込むためにString#split(String)を使ってみましたが、気になる挙動を示していたのでメモしておきます。

実行環境は、Java5.0です。たとえば、CSVファイルのある1行に「1,2,3,,,,1,,」というものがあったとしましょう。すると、このsplitから返ってくるStringの配列型の内容は、「1」「2」「3」「」・・・「」「1」となります。

これはリファレンスにも書かれていますが、ちょっと忘れているとバグのもとになりそうです。ちなみに、後半の空文字も含めたい場合はString#split(String,int)の第2引数を負の数にすれば大丈夫です。

TomcatでStackTraceを出力

  • 更新日:
  • Java

Tomcat上でサーブレットを実行させた場合、なんらかの例外をStackTraceに出力させようとしても、通常ではできません。これはTomcatがサーブレット上で表示されるのを防いでいるためです。実際に運用している場合はログに出力させればいいのですが、テスト中などでは標準エラー出力などに出力させた方が、デバッグが進む場合もあります。

そんなときは、e.printStackTrace(System.err)と記述すれば、標準エラー出力にエラーが出力されます。ログに出力させたい場合も、メソッドの引数にstreamを与えればOKです。

JavaとPHPのforeach

Javaの拡張for文と、PHPのforeach文では使い方がけっこう違うことに気づきました。(今さらな話ですが・・・。)

Javaの5.0から導入された拡張for文は以下のような記述をします。

for($var : $collection){
    ・・・・
}

それに対して、PHPでは以下のようになってます。

foreach($array as $var){
    ・・・・
}
foreach($array as $key => $val){
    ・・・・
}

ちょっと油断すると忘れるんですよね?。ってことで、メモっときます。

画像の合成

  • 更新日:
  • Java

昨日の夜は、Javaで画像を合成するプログラムを書いてました。合成するといっても、ある画像に別の画像を上書きするという、けっこう単純なプログラムなんですが。

でも、JavaのGraphic2Dを使った経験がほとんどないので、けっこう詰まりました。画像は、通常Imageクラスを継承したクラスで表されているのが普通なんですが、そこからが未知の領域。Imageを描画するには、ImageConsumerインターフェースがImageProducerクラスに対して要求を出すところから始まるのですが、その応答をいかしにて返すか。そこが今回のプログラムの山場だったと思います。

基本的に2枚の画像を組み合わせる時を考えると、上書きする方の画像の背景部分は透過するようにしたほうが直感的ですよね。というわけで、上書きする方の背景が白い時は上書きされる方の色情報を返すようにして、そのほかの時は上書きする方を返すようにしました。

経験さえあれば、1時間もあればできるプログラムを5時間くらいかかって作成してました。プログラムは経験がものを言いますね、やっぱり。

続・RSA暗号

  • 更新日:
  • Java
  • Java, 暗号

この前書いた「RSA暗号」のエントリについて、学科の友達と話していたら、「Javaのio関連のクラスに暗号化のクラスをラッピングできたらいい感じじゃないか?」という話題が出てきたので、調べてみました。

検索で引っ掛けてみると、JavaAPIの中のページに詳細な情報がありました。
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/security/CryptoSpec.html
java.securityパッケージは、RSA暗号も含めた暗号化に関するクラスが含まれています。でも、さすがにjava.io.*Streamをラッピングしたらすぐに暗号が送れるようになるというわけではなさそうです。公開鍵暗号で通信するとしたら、相手から公開鍵をもらってこないといけないし、ソケットでの通信と同じような前準備をもう一回しないとダメそうです。ioをラッピングしてくれそうなクラスは、自作しないとダメっぽいですね。

とりあえず現段階ではこうかと思いますが、本当は違うのかも。また調べてみます。

続きを読む

CollectionFrameworkを勉強中

  • 更新日:
  • Java

Javaをより良く使おうと思って、今コレクションフレームワークを勉強中です。
浅煎り珈琲 Javaアプリケーション入門
調べてみると、昔のAPIは同期を常に行っている関係で、負担が大きかったとか。Vectorとか、HashTableとかはその典型らしいです。で、それをより汎用的に使えるようにするために、CollectionFrameworkが作られたって話です。

このフレームワークに含められているクラスは、同期されてないものなんですが、Collectionsクラスのstaticメソッドを使ったり、プログラマが意識することで、同期を取るように変更したらしいです。いくらJavaに速度を期待しないほうがいいとはいっても、遅いよりは速いほうがいいですからね。同期されていない軽量なものを作ることで、高速に実行できるようになったらしいです。

いろいろなサイトを読めば読むほど、よくできてるな〜と感心します。こんなテクニックを使って、いろいろなコードを組んでみたいですね。

このページの上部へ

About

tetsuの日記・雑記です。
日々経験したことを記録していきます。

広告

サイト内検索

最近のピクチャ

  • リアディレーラ

月別アーカイブ

最近のコメント