ObectSquare

[JavaOne 2001 Japan 特集]


New I/O と国際化 - J2SE 1.4 の新機能


 このレポートでは J2SE 1.4 の新機能のうち、雑誌等でもまだあまりとりあげられていない New I/O と国際化関連の話題について報告したいと思います。

■ 11/28(水) TS-2448

New I/O APIs for the Java Platform

 New I/O に関しては JavaOne のパンフレットで初めて知ったのですが、以前ファイル I/O を伴う Java アプリケーションを書いた際、パフォーマンスやエンコーディングの件で悩んだ経験があったので、このセッションに興味をもち参加することにしました。スピーカーは NTT 未来ネット研究所の風間一洋さん、

「Java プログラミング・ノート CAFE BABE 国際化と日本語処理」(アスキー)

などの著書で有名な方です。

 まず、New I/O の概要ですが、java.nio というパッケージが新規に追加されます。ファイル I/O の高速化とエンコーディングの取り扱いの変更が大きなテーマですが、このセッションでは主に前者の話が中心に進められました。New I/O では、Channel と Buffer を使ってファイル I/O を行います。Channel は I/O の対象となる実体との接続を表し、既存の Stream 系のクラスとの相互変換もできるようになっています。Buffer は文字通りデータのバッファで、セッションでは使用方法の詳細も説明されてましたが、私は実際に使ってみたことがなかったので今ひとつピンときませんでした。興味がある方はベータ版をダウンロードして使ってみるとよいと思います。また、メモリマップファイル (MappedByteBuffer) を用いると、既存の I/O より2倍程度高速化が図れるそうです。

 なお、Channel/Buffer は従来の Stream 系の高速化を行うものですが、Reader/Writer などネイティブなテキストファイルの処理はどうするのか疑問に思い伺ったところ、後で述べる Encoder/Decoder と組み合わせるか、今までどおり Reader/Writer を使用するというお答えでした。既存の java.io のアーキテクチャもそれはそれでよくできているので、特に不都合がなければ引き続き使えばよいとのことです。目的によって使い分けていくということでしょう。

 また、J2SE 1.4 には間にあいませんでしたが J2SE 1.5 へ向けた課題として、C 言語の printf/scanf のようなフォーマットつき I/O なども検討しているそうです。

≪関連 URL≫


■ 11/29(木) BOF-18

New I/O API における Java の国際化について

 この BOF のテーマは前日のセッションに引き続いて New I/O、特に国際化関連の話題が中心となりました。スピーカーも同じく風間さんです。

 国際化関係の主な変更点は以下のとおりです。

 まず「Unicode 3.0 対応」ですが、日本語関係では JIS X 0213 で制定された JIS 第3水準、第4水準の漢字が(一部?)使用可能になります。「文字列の内部表現」では、フォーマットが UCS-2 から UTF-16 へ変更になります。詳しくは文字コード関連のドキュメント(*)を見ていただきたいのですが、表せる文字数が増える反面、1つの文字を char 2つで表す場合(surrogate pair)が発生し、文字列が不定長になるので注意が必要です。「文字シーケンス、文字バッファ」では、java.lang.CharSequence インタフェースと、java.nio.CharBuffer クラスが追加されます。java.nio.CharBuffer は java.lang.StringBuffer に比べ、排他制御がないため高速な処理ができるそうです(ただし自動拡張なし)。最後に「文字集合と変換」では、文字列とバイト配列の間のエンコーディングの仕様がオープンになり、java.nio.charset パッケージに追加された Charset、CharsetEncoder、CharsetDecoder などのクラスを使って、明示的に変換が行えるようになります。

 一通りの説明の後、質疑の時間がとられたのですが、文字列が不定長になることと、シフトJIS のマッピングの違いが中心的な話題でした。文字列が不定長になることに関しては、初期の Java アプリケーションで日本語が正しく扱えないものがときどき見られましたが、そういった問題がまた発生するものと思われます。シフトJIS の件では、「MS932 の追加を要望したら、同時に "Shift_JIS" にマッピングされてしまったが、誤りなので訂正を依頼している」そうです。電子署名などを使う上でも問題があり、XML 関係者からもクレームが出ているらしいです。Microsoft のマッピングを使いたい場合は "Windows-31J" を使用してほしいとのことでした。

(*) 川俣 晶「パソコンにおける日本語文字処理/文字コードハンドブック」(技術評論社) がおすすめ。

≪関連 URL≫


■ まとめ

 J2SE 1.4 ではその他にも、XML 関連 API、Java Print Service、Java Web Start、Assertion の追加、AWT、Swing の改良などが行われます。J2ME や Web Service などに比べて落ちついてきた感のある J2SE ですが、これからも Java テクノロジーの基盤として徐々に改善が行われていくものと思われます。J2SE もこれだけ大きくなってしまうと全てを理解するのは困難ですが、必要なときに 適切な使い方ができるようにアンテナだけは張っておく必要があると思いました。

≪関連 URL≫

(株)オージス総研
伊藤 喜一

© 2001 OGIS-RI Co., Ltd.
Index
Index