プログラム悪戦苦闘日記

はてなダイアリーからの移行(遺物)

Java

Zip圧縮 -part3 日本語文字化け-

エントリー名を日本語にすると文字化けする。エンコードを変えれば可能かと思ったが、UTF8、ISO8859-1、ISO2202-JPを試したがだめだった。どうすりゃいいんだ? import java.util.*; import java.util.zip.*; import java.io.*; public class Main { public …

ZIP圧縮でもしてみる -part2 ZIPファイルの読み込み -

今回は読み込み。読みは書き込みの反対なので、ZipInputStreamとZipEntryをつかって読み込むことができる。しかし読み込みは、ZipOutputStreamと同様、ZInputStream#read(bute[], int, int)のみなので、Zipアーカイブ内にあるテキストファイルを読みたいとき…

ZIP圧縮をしてみる - part1 zip書き込み -

JavaでZIPファイルを扱うには java.util.zip パッケージを使う。このパッケージはJDK1.1からあるにもかかわらず、ZIP圧縮を説明しているサイトは非常に少ないと思う。まぁ、javadoc読めば分かる、ということなのか。とにかく今回はzipの書き込みをやってみた…

PreparedStatementは無印Statementより早いのか -part3-

Webアプリケーションで使う、という条件に近づけるためにConnectionをプールして測定をしてみた。入力データなどの条件は前回と同じである。 import java.util.*; import java.sql.*; import javax.naming.*; import javax.sql.*; public class Main { stati…

PreparedStatementは無印Statementより速いのか? part2

記事の内容を鵜呑みにする前に、自分で測定しようと思った。Webアプリケーションで使われる状況を想定した条件にしたつもりだ。。 まず、データベース(もどき)としてMS Accessを使った。テーブルレイアウトは次の通りである。 変数名 | 型 | - ID | charac…

PreparedStatementはただのStatementより速くなるのか?

PreparedStatementを使うと、事前にSQLがコンパイルされて速くなるという。大体どのサイトも本もそんなことが書いてある。しかしWebアプリケーションでは、毎回DataSource → Connection → Statementというように取得する。Connectionはプールしておくとして…

Java New I/O part5(最終回)

New I/Oの話題はMappingByteBufferやSelectorの話もあるが、ここで一旦打ち切り。最終回は、本当にNew I/Oは今までのI/Oより速いか、測ってみた。プログラムの内容は、前回の練習問題でやったファイルの中身をすべてビット反転して、ファイルに出力するとい…

Java New I/O -part4-

今回はチャネルのはなし、とはいってもあまり書くことはない。重要なのはread()でByteBufferから読み、write()でByteBufferに書き込むだけだ。逆に言うとBuffer系はByteBufferだけしか使えないのかも。 そんなわけでTechScoreにある第3回の実習課題1でもや…

Java New I/O -part3-

かのサイトにある第2回の実習問題1というのをやってみた。折角なのでなるべくBuffer操作メソッドを使ってみた。 import java.nio.*; import java.util.*; /** * 第2回目 実習課題1 * 次の仕様を満たすプログラムを作成してください。 * * - 要素数10000…

Java New I/O -part2-

前回の続き。バッファについてまとめてみる。前回書いたように、バッファはただのデータの入れ物であり、boolean以外のプリミティブタイプが用意されている。Bufferは、いわゆる「固定長データ」であり、可変長にはできないようだ。Bufferの中で重要なのは、…

Java New I/O (java.nio)

JDK1.5.0の時代なのに、いまさらJDK1.4.0の新機能のはなし。Java New I/O(java.nioパッケージ)についての記事はずっと探していたのだが、ようやく探し当てた。http://www.techscore.com/tech/Java/NIO/1.html http://www.techscore.com/index.html (トッ…

java.ioの周辺 ファイル操作関連

Java Tips系ページでは、I/Oのやり方は説明されているが、ディレクトリ操作などがあまり書かれていない。そのため、これについてまとめておく。 ファイルサイズの取得は? java.io.File#length() を使う。ファイルが存在しない場合は 0Lを返す、とあるからサ…

Tomcat4.1でSSLを使う

結構うまくいかないものなので、まとめておく。 1.keytoolを使ってプライベートRSAキーを生成する 1. keytoolはJDKのインストールディレクトリのbinの中にある。コマンドプロンプトで次のように入力する keytool -genkey -alias tomcat -keyalg RSA 2.パ…

Struts エンタープライズなんとか に書かれていた内容の補足

前回あげたエンタープライズなんとか、というサイト http://www.itmedia.co.jp/enterprise/0311/28/epn02.html について補足。Web上の記事なので、どうしても記述が省略されてしまうので。 第4回 Filterクラスについて Filterクラスの登録は、Tomcatの /WEB-…

Strutsについての説明があるURL達

↓とりあえず、あげておく。内容の良し悪しは読んでないのでわからん。そのうち内容をまとめる。 http://www.ingrid.org/jajakarta/struts/ Ja-Jakarta Project。Jakartaプロジェクトの日本語訳。でもStrutsは1.0.2から更新されてない様子。 http://www.itmed…

Struts Actionの初期化処理

を行う場所は、PlugInを使うらしい。 まずは、PlugIn インターフェイスをimplementするクラスを作る。init()が初期化、destoroy()が終了処理になる。 package sample.add; import javax.servlet.*; import org.apache.struts.action.*; import org.apache.st…

JDK1.5.0 Genericsについてメモ

ネタがないからメモだけ。Genericsの注意点について。 型変数がなんらかのインターフェイスをimplmentsしていることを宣言するときでも、extendsを使う。 (例) public class Hoge> { ... 型変数が複数のインターフェイスを実装していることを宣言するとき…

Strutsを使ってみた part2

使いやすいフレームワークの一つに、使いたい機能だけをつまみ食いできる、というのがあると思う。Strutsも使いたい機能だけを使うことにした。全部勉強するのもめんどくさいからね。とりあえず、便利だと思った機能は、 画面遷移の管理 これのためにStruts…

Strutsをつかってみた

ずっとよく聞くStrutsとは何か、ちとやってみた。なんか宣伝文句が多くてよくわからないものだったが、どうやらWebアプリケーションを開発するためのフレームワークであった。何ができるかというと、 画面遷移の管理 カスタムタグライブラリの提供 Java Bean…

スレッドデザインパターン - Read-Write Lock -

6章の「Read-Writre Lock」をReadWriteLockインターフェイスを使ってみた。ここで注意したいのが、ReentrantReadWriteLockの均等性ポリシーをfair(コンストラクタの第一引数をtrue)にしておかないと、Readerスレッドの数が多いので、いつまでもWriterスレッ…

Tiger Concurrency Utilities -part3-

ひさびさの更新になってしまった。今回はReadWriteLockの話。 ReadWriteLock インターフェイス 1.概要 「読み」は多数OKでも「書き」はひとりだけ、というときに使うロック。キャッシュなんかによく使われるらしい。操作は、 ReadWriteLock#readLock() で読…

スレッドデザインパターン - Producer-Consumer -

TableクラスをLinkedBlockingQueueで実装した。EaterThreadでは要素を取り出すとき、空の場合は待機してほしいので、poll()ではなくtake()を使った。poll()にすると、要素がないときブロックせずにnullを返してしまう。また、MakerThreadのid_はロックする必…

Tiger Concurrency Utilities -part2-

今回は同期コンテナであるBlockingQueueのはなし。 BlockingQueueインターフェイス 1.概要 「Queue」というくらいだから、java.util.Queueインターフェイスを継承している。 ブロッキングが起こるタイミングは、 キューが空のときに、要素を取り出す キュー…

スレッドデザインパターン - Gurded Suspentation

Conditionを使って3章の「Gurded Suspentation」を書いてみた。 このサンプルは、ClientThreadがRequestを出して、ServerThreadがRequestを非同期に処理する、というもの。Requestの一時置き場にRequestQueueを使っている。 ちなみにこのRequestQueueは、実…

スレッドデザインパターン - Single Threaded Execution

Lockインターフェイスを使って、1章の「Single Threaded Execution」を書いてみた。 Main.java package dp.chap01; public class Main { public static void main(String[] args) throws Exception { System.out.println("Testing Gate, hit CTRL+C to exit…

Tiger Concurrency Utilities

まずは同期オブジェクトから。 Lockインターフェイス - ミューテックス 1.sychronizedの違い synchronizedはオブジェクト全体にロックがかかるが、LockはLockオブジェクトにロックがかかる。 2.ロックのしかた ・普通にロックするときは、Lock#lock()を呼ぶ…

JDK1.5.0のスレッドについてメモ

いずれちゃんとまとめるとして、とりあえず列挙しておく。 1.同期オブジェクト ・Lock (ミューテックス) いわゆるミューテックス。Javaはデストラクタがないので、Lock#unlock()をfinally内に書くのはお約束。 WindowsプログラムではCriticalSectionと呼ば…

AspectJで時間を計測する

どのメソッドがどれくらいの時間が掛かっているかを測るには、アスペクトを用いるのがbestだと思う。 import java.util.*; public aspect TimeAspect { static final long freq_ = PerformanceCounter.queryPerformaceFrequesncy(); HashMap map_ = new Hash…

画像処理3 - 抜き色転送

通常抜き色転送は、抜き色はGraphic Contextに描画しないようにしますが、 Javaの場合、抜き色のalpha値を0にしてしまったほうが早い。 これを行うにはjava.awt.image.RGBImageFilterのサブクラスを作るのが、一般的らしい。 RGBImageFilterのサブクラスは、…

System.currentTimeMillis()の罠に堕(お)ちる2

QueryPerformanceCounterがJNIで実装できたので計測をしてみた。 測定プログラムは後述。 CPU:Pentium3 1.2GHz + メモリ512MByte + WindowsXP Pro sleepの引数(msec)| 12 | 6 | 3 --------------------|-------|------|----- Thread#sleep | 12.40 | 6.42 | …