| 
 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 ソフトウェア  |