NIO API:
|
New I/O API |
このドキュメントでは、J2SE v 1.4 の Beta 3 リリースの NIO API が、Beta 2 リリースと比べてどのように変更されたかについて説明します。 最も大きな変更点は、java.nio.charset パッケージの設計が変更され、元の設計に見られたパフォーマンス上の問題が解決されたことです。 java.util.regex パッケージにいくつかの小さな変更が加えられ、Perl 5 で実装された正規表現言語とほぼ完全に連携できるようになりました。 その他の変更は、Java コミュニティから寄せられたフィードバックとエキスパートグループで提示された問題に対応するものです。次の分野ごとに変更点の概略を示します。
バッファ
hasArray
、array
、およびarrayOffset
メソッドがすべての具象バッファクラスに追加された (4503732)
MappedByteBuffer
クラスの仕様が改訂され、次の記述が加えられた。すなわち、マップバイトバッファのアクセス不能領域にアクセスしようとすると、任意の値が返されるか (読み取りの場合)、または可視効果がない (書き込みの場合) こと、さらにアクセス時またはそのあとで、指定されていない例外がスローされることが記述された。 この記述は Sun の現在の実装と一貫性があるstatic メソッド CharBuffer.wrap(String,int,int) および CharBuffer.wrap(String) が、
String
ではなくCharSequence
を取るように変更されたネイティブコードで操作されるダイレクトバッファを設定する際に役立つ
ByteOrder.nativeOrder
メソッドが追加されたorder メソッドが、各非バイトバッファクラス (
CharBuffer
、ShortBuffer
、IntBuffer
、LongBuffer
、FloatBuffer
、およびDoubleBuffer
) に追加されたファイル
モード文字「s」と「d」が、
RandomAccessFile
コンストラクタに追加され、ファイルを開くときに、同期書き込みまたは同期データ書き込みを指定できるようになった整数の定数 FileChannel.MAP_{RO,RW,COW} が、型保証された列挙
FileChannel.MapMode
に置き換えられたセレクタ、選択可能チャネル、選択キー
ソケットチャネルクラスの socket() メソッドが、対応する java.net ソケットクラス内で宣言された public メソッド以外のメソッドを定義しないオブジェクトを返すように制限された (4497675)
チャネルまたはセレクタを作成したプロバイダを取得できる API が追加された。 すなわち、
DatagramChannel
、ServerSocketChannel
、SocketChannel
、Pipe.SourceChannel
、Pipe.SinkChannel
、AbstractSelectableChannel
、およびAbstractSelector
クラスの protected コンストラクタにプロバイダ引数が追加され、SelectableChannel
、AbstractSelectableChannel
、Selector
、およびAbstractSelector
クラスに provider() メソッドが追加された。 これらの変更は、プロバイダに依存しないチャネルアダプタを記述するために必要 (4497675)
ServerSocketChannel.accept
メソッドが、Socket
ではなくSocketChannel
を返すように変更された。 Socket を返すことは、多くの開発者の混乱の元になっていた (4497675)余分な DatagramChannel.open(int port) メソッドと、
SelectorProvider.openDatagramChannel
メソッドの int 引数が削除された (4497675)
SelectionKey
の仕様が改訂され、attach
メソッドとattachment
メソッドがスレッドに対して安全であることが記述された3 つの引数を取る
register
メソッドがSelectableChannel
に追加され、チャネルをセレクタに登録するときに初期 (または新規) アタッチメントを指定できるようになったタイムアウトの直接サポートがすべてのソケットチャネルから除去され、TimeoutException が削除された。 タイムアウトは、関連するソケットアダプタを使用することによって引き続きサポートされる。このソケットアダプタは、スレッドごとにキャッシュされたセレクタを使用してタイムアウトを実装する (4487459)
データグラムチャネルは、非ブロックモードの接続操作をサポートしない (または必要としない) ため、
DatagramChannel
のconnect
メソッドの動作が、boolean 値を返す動作から void に変更されたシャットダウンメソッドがすでに
java.net.Socket
クラスによって提供されているため (ただし形式は若干異なる)、SocketChannel
からシャットダウンメソッドが削除されたisOpen メソッドが
Selector
とAbstractSelector
に追加された。close
メソッドとimplCloseSelector
メソッドがAbstractSelector
に追加されたstatic 簡易メソッド
open(SocketAddress remote)
がSocketChannel
に追加された
Selector.wakeup
メソッドの仕様に、selectNow
の呼び出しを含むすべての選択操作によって待機状態がクリアされることが明示された文字セット
コーダの結果をレポートする型保証された列挙である
CoderResult
クラスが定義された。encode
、decode
、および flush メソッドは、例外をスローする代わりに、このクラスのインスタンスを返すようになった。 この変更は、使いやすく推論しやすい、非常に高速なコーダをサポートする ( 4503732)substitution メソッドの名前が、Unicode の仕様に沿った (さらに綴りも簡単な) replacement に変更された。 置き換えは、
replacement
メソッドによって返され、replaceWith
メソッドによって変更される (4503732)置き換えの処理が一般化され、形式が間違っている入力と、マッピング不可能な文字のエラーに対して異なる処理を指定できるようになった。 エラーを検出したときに実行する処理は、単純な型保証された列挙である
CodingErrorAction
クラスのインスタンスによって指定される。 この処理は、onMalformedInput
メソッドとonUnmappableCharacter
メソッドを使用して指定される。処理の現在値は、malformedInputAction
メソッドとunmappableCharacterAction
メソッドを使用して取得できる (4503732)文字セットを作成したコーダをコーダ自体から取得できるように、コーダクラス内に
charset
メソッドが定義された (4503732)サブクラスのサポートを改善するために、protected メソッド
implReset
、implFlush
、implReplaceWith
、implOnMalformedInput
、およびimplOnUnmappableCharacter
が追加された。 これらのメソッドは、対応する public メソッドが、コーダの状態とすべての引数を検証した後に、public メソッドによって呼び出される。 これらのメソッドのデフォルトの実装は何も処理を実行しない。 コーダの状態チェックを実装するには、implReset メソッドと implFlush メソッドも必要になる。すなわち、これらのメソッドは、指定されたコーディングの操作シーケンスと異なる方法でコーダが使用されている場合に不正な引数の例外をスローするために必要になる (4503732)
isAutoDetecting
メソッドとisCharsetDetected
メソッドを追加し、detectedCharset
をオプションの操作にすることによって、CharsetDecoder
内の文字セットを自動検出するための API がクリーンアップされた (4503732)例外をスローしないで、置き換えの妥当性をテストできるように、
CharsetEncoder
内にisLegalReplacement
メソッドが定義された (4503732)
UnmappableCharacterException
が、マッピング不可能な文字を示す入力ユニットの数をレポートするように改訂された (4503732)簡易メソッド
Charset.decode(ByteBuffer)
、Charset.encode(CharBuffer)
、およびCharset.encode(String)
が追加された
CharsetDecoder
とCharsetEncoder
のデフォルトのエラー処理が、形式が間違っている入力とマッピング不可能な文字のエラーの両方をレポートするように変更された。 この変更は、J2SE 1.4 より前の API によって実行されるコーディング処理には影響しない。これらの API は、引き続き、エラーのある入力を置き換え、エラーをレポートしない
InputStreamReader
とOutputStreamWriter
に、それぞれ既存のCharsetDecoder
オブジェクトとCharsetEncoder
オブジェクトを取るコンストラクタが追加された (4426480)正規表現
条件構造 (?(cond)yes|no) は、Perl の試験的な機能にすぎないため、この構造が削除された (4482696)
メタキャラクタとしての < and > は、HTML や XML で一般的に使用されるトークンと衝突しやすいため、削除された (4482696)
行末記号としての垂直タブと用紙送りが削除された (4482696)
新しい
Pattern.UNIX_LINES
モードと、対応するパターンフラグ (?d) が追加された。このモードでは改行 ('¥n') のみが行末記号として認識される (4482696)Perl と同じように、角括弧 ( ] ) と中括弧 ( } ) はリテラルとして解釈されるようになった (4482696)
Perl の解釈方法に近づけるために、後方参照の解析方法が変更された (4482696)
切り取り演算子 (!) は、Perl でサポートされていないため、削除された (4482696)
Pattern.COMMENTS
モードと、対応する Perl スタイルのパターンフラグ (?x) が追加された。このモードでは、正規表現内に空白とコメントを埋め込むことができる (4482696)論理和 ([X[Y]])、論理積 ([X&&Y])、および補集合 ([^X]) を使用した、文字クラスの論理和と論理積をサポートするように、文字クラスの構文が改訂された (4482696)
^ メタキャラクタが、最後の行末記号のあとに一致しないように変更された (Perl ではこのように処理されないため) (4482696)
(? で始まるすべてのグループ構造が、純粋なグループとして扱われ、テキストを取得しないように変更された (4482696)
¥G 境界マッチャーが追加された (4470527)
Matcher.find(int startAt)
が追加された (4474290)
Matcher
クラス内の置き換え文字列構文が、$(n) から $n に変更され、$ のエスケープ方法が Perl と一致するように定義された (4479128)
Pattern
およびString
の split メソッドが Perl の動作と同じになるように改訂された (4497806)ブロック / カテゴリ構文が、Perl の ¥pFoo} および ¥PFoo} 構文と一致するように改訂された (4495089)
POSIX 文字クラスの名前が、Perl で使われている大文字の名前と一致するように改訂された (4495089)
Pattern.matches(regex, input)
を簡単に呼び出す方法として、String.matches(regex)
が追加された
Matcher.replaceAll(repl)
を簡単に呼び出す方法として、String.replaceAll(regex, repl)
が追加された説明、パターン、およびインデックスのプロパティが、
PatternSyntaxException
に追加されたその他
呼び出しの変更が改善された。
DatagramChannel.connect
、DatagramChannel.disconnect
、FileChannel.position(long)
、FileChannel.truncate(long)
、SelectableChannel.configureBlocking
、SelectionKey.interestOps(int)
、Selector.wakeup
、Matcher.appendReplacement
、Matcher.reset()
、およびMatcher.reset(java.lang.CharSequence)
メソッドが、それらのメソッドの呼び出し対象のオブジェクトを返すように改訂された。Matcher.appendTail
が、メソッドに渡された文字列バッファオブジェクトを返すように改訂された
Copyright © 2001 Sun Microsystems, Inc. All Rights Reserved. |
Java ソフトウェア |