|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
java.lang.Object
|
+--java.io.InputStream
|
+--java.io.ObjectInputStream
事前に ObjectOutputStream を使って作成されたプリミティブデータとプリミティブオブジェクトを直列化復元します。
ObjectOutputStream と ObjectInputStream は、FileOutputStream または FileInputStream とともに使えば、アプリケーションに、オブジェクトのグラフのための持続的なストレージを提供することができます。ObjectInputStream は、事前に直列化されたオブジェクトを元に戻すために使います。ほかの使用方法としては、ソケットストリームの使用による、ホスト間でのオブジェクトの受け渡しや、リモート通信システムにおける属性やパラメータの整列や整列解除があります。
ObjectInputStream は、ストリームから作成されたオブジェクトグラフにおけるすべての型のオブジェクトが、Java Virual Machine に存在するクラスに確実にマッチするようにします。クラスは、標準の機構を使って必要に応じてロードされます。
ストリームから読み込むことができるのは、java.io.Serializable インターフェースか java.io.Externalizable インターフェースをサポートするオブジェクトだけです。
オブジェクトをストリームから読み込むには readObject メソッドを使います。希望の型を取得するには、Java の安全なキャストを使う必要があります。Java では、文字列と配列はオブジェクトで、直列化の間はオブジェクトとして扱われます。それらを読み込む際には、希望の型にキャストされている必要があります。
基本データ型をストリームから読み込むには、DataInput の適切なメソッドを使います。
オブジェクトのデフォルトの直列化復元機構は、各フィールドの内容を、書き込まれたときの状態に戻します。transient または static と宣言されたフィールドは、直列化復元処理では無視されます。ほかのオブジェクトを参照すると、それらのオブジェクトは、必要に応じてストリームから読み込まれます。オブジェクトのグラフは、参照共有機構を使って正しく復元されます。直列化復元が行われるときには、常に新しいオブジェクトが割り当てられ、それによって既存のオブジェクトへの上書きが防止されます。
オブジェクトの読み込みは、新しいオブジェクトのコンストラクタの実行に似ています。メモリがオブジェクトに割り当てられ、ゼロ (NULL) に初期化されます。直列化可能でないクラスに対して、引数なしのコンストラクタが呼び出されたあと、直列化可能クラスのフィールドが、java.lang.Object にもっとも近いクラスから始まってもっともオブジェクトに固有のクラスで終わるストリームから復元されます。
たとえば、ObjectOutputStream の例で書き込まれたストリームからの読み込みは、次のように行います。
FileInputStream istream = new FileInputStream("t.tmp");
ObjectInputStream p = new ObjectInputStream(istream);
int i = p.readInt();
String today = (String)p.readObject();
Date date = (Date)p.readObject();
istream.close();
クラスは、インタフェース java.io.Serializable または java.io.Externalizable を実装することによって、クラスがどのように直列化されるかを制御します。
Serializable インターフェースを実装することによって、オブジェクトの直列化が、オブジェクトの状態全体の保存と復元を行うことが可能になり、またクラスが、ストリームの書き込み時とストリームの読み込み時の間に展開することが可能になります。オブジェクトの直列化は、オブジェクト間の参照を自動的に移動し、オブジェクトグラフの全体を保存および復元します。
直列化処理と直列化復元処理のときに特別な操作を必要とする Serializable クラスは、次のメソッドを実装する必要があります。
private void writeObject(java.io.ObjectOutputStream stream)
throws IOException;
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
readObject メソッドは、対応する writeObject メソッドによってストリームに書き込まれたデータを使用する特定のクラスについて、オブジェクトの状態を保存および復元する責任を持ちます。このメソッドは、そのスーパークラスやサブクラスに属する状態に関与する必要はありません。状態を復元するには、個々のフィールドについて ObjectInputStream からデータを読み込み、オブジェクトの適切なフィールドへの割り当てを行います。基本データ型の読み込みは、DataInput によってサポートされます。
オブジェクトデータを読み込もうとするときに、その位置が対応する writeObject メソッドによって書き込まれたカスタムデータの境界を超えている場合は、eof フィールドの値が true の状態で OptionalDataException がスローされます。オブジェクトを直列化して読み込もうとするときに、その位置が割り当て済みデータの終わりを超えている場合は、ストリームの場合と同様に、データの終わりを示す例外が返されます。つまり、バイト単位の読み込みでは、バイトが読み込まれたときに -1 が返されます。プリミティブ読み込みでは、EOFException がスローされます。対応する writeObject メソッドがない場合は、デフォルトの直列化データの終わりが割り当て済みデータの終わりになります。
プリミティブ読み込みとオブジェクト読み込みが readExternal メソッドから呼び出された場合は、両方とも同じように動作します。ストリームの位置が対応する writeExternal メソッドによって書き込まれたデータの終わりにある場合、オブジェクト読み込みでは eof が true に設定された状態で OptionalDataException がスローされ、プリミティブ読み込みでは EOFException がスローされます。ただし、古い ObjectStreamConstants.PROTOCOL_VERSION_1 プロトコルを使用して書き込まれたストリームでは、この動作は適用されません。writeExternal メソッドと異なり、データの終わりが書き込まれないため、データの終わりを検出できないためです。
readObjectNoData メソッドは、直列化復元されるオブジェクトのスーパークラスが直列化ストリームに指定されていないときに、特定のクラスについてそのオブジェクトの状態を初期化します。直列化復元されるインスタンスのクラスが受信側と送信側で異なる場合や、受信側のインスタンスで拡張されているクラスが送信側で拡張されていない場合に、このような状況が発生することがあります。また、直列化ストリームが改ざんされている場合にも発生します。悪意のあるまたは不完全なソースストリームから直列化復元したオブジェクトを適切に初期化するときは、readObjectNoData を使用します。
直列化は、java.io.Serializable インターフェースを実装しないオブジェクトのフィールドの読み込みや、それらのフィールドへの値の割り当ては行いません。直列化可能でないオブジェクトのサブクラスを直列化可能にすることは可能です。この場合、直列化可能でないクラスは、そのフィールドを初期化できるようにするため、引数なしのコンストラクタを持つ必要があります。この場合、直列化可能でないクラスの状態を保存および復元するのは、サブクラスの責任になります。そのクラスのフィールドがアクセス可能である (public、package、または protected) 場合、あるいは状態の復元に利用できる set メソッドや get メソッドがある場合がしばしばあります。
オブジェクトを直列化復元する間に発生したすべての例外は、ObjectInputStream にキャッチされ、読み込み処理を異常終了させます。
Externalizable インターフェースを実装すると、オブジェクトの直列化された形式の内容および形式をオブジェクト側が完全に制御することが可能になります。Externalizable インターフェースのメソッドである writeExternal と readExternal は、オブジェクトの状態を保存および復元するために呼び出されます。これらのメソッドは、クラスによって実装された場合には、ObjectOutput と ObjectInput のすべてのメソッドを使って、自身の状態の書き込みおよび読み込みを行うことができます。どのようなバージョンであっても処理できるようにするのは、オブジェクトの責任です。
DataInput,
ObjectOutputStream,
Serializable,
「オブジェクト直列化仕様の第 3 章オブジェクト入力クラス」| 入れ子クラスの概要 | |
static class |
ObjectInputStream.GetField
入力ストリームから読み込まれた持続フィールドへのアクセスを提供します。 |
| フィールドの概要 |
| コンストラクタの概要 | |
protected |
ObjectInputStream()
ObjectInputStream を完全に再実装するサブクラスが、ObjectInputStream のこの実装によって使用されたばかりの private データを割り当てる必要がないようにする手段を提供します。 |
|
ObjectInputStream(InputStream in)
指定された InputStream から読み込む ObjectInputStream を作成します。 |
| メソッドの概要 | |
int |
available()
ブロックせずに読み込むことができるバイト数を返します。 |
void |
close()
入力ストリームを閉じます。 |
void |
defaultReadObject()
現在のクラスの非 static および非 transient のフィールドを、このストリームから読み込みます。 |
protected boolean |
enableResolveObject(boolean enable)
ストリームから読み込まれたオブジェクトが置換されます。 |
int |
read()
データのバイトを読み込みます。 |
int |
read(byte[] buf,
int off,
int len)
バイトの配列に読み込みます。 |
boolean |
readBoolean()
boolean を読み込みます。 |
byte |
readByte()
8 ビットのバイトを読み込みます。 |
char |
readChar()
16 ビットの char を読み込みます。 |
protected ObjectStreamClass |
readClassDescriptor()
直列化ストリームからクラス記述子を読み込みます。 |
double |
readDouble()
64 ビットの double を読み込みます。 |
ObjectInputStream.GetField |
readFields()
ストリームから持続フィールドを読み込み、それらを名前を指定してアクセスできるようにします。 |
float |
readFloat()
32 ビットの float を読み込みます。 |
void |
readFully(byte[] buf)
バイトを読み込みます。 |
void |
readFully(byte[] buf,
int off,
int len)
バイトを読み込みます。 |
int |
readInt()
32 ビットの int を読み込みます。 |
String |
readLine()
推奨されていません。 このメソッドはバイトを正確に文字に変換しません。詳細および代替メソッドについては DataInputStream を参照してください。 |
long |
readLong()
64 ビットの long を読み込みます。 |
Object |
readObject()
ObjectInputStream からオブジェクトを読み込みます。 |
protected Object |
readObjectOverride()
引数なしの protected コンストラクタを使用して ObjectOutputStream を作成した ObjectOutputStream の信頼できるサブクラスによって呼び出されます。 |
short |
readShort()
16 ビットの short を読み込みます。 |
protected void |
readStreamHeader()
サブクラスが自身のストリームヘッダの読み込みと検証を行えるようにするために提供されています。 |
Object |
readUnshared()
ObjectInputStream から「共有されない」オブジェクトを読み込みます。 |
int |
readUnsignedByte()
符号なし 8 ビットバイトを読み込みます。 |
int |
readUnsignedShort()
符号なし 16 ビットの short を読み込みます。 |
String |
readUTF()
UTF 形式の文字列を読み込みます。 |
void |
registerValidation(ObjectInputValidation obj,
int prio)
オブジェクトグラフが返される前に検証されるべきオブジェクトを登録します。 |
protected Class |
resolveClass(ObjectStreamClass desc)
指定されたストリームクラスの記述に対応するローカルクラスをロードします。 |
protected Object |
resolveObject(Object obj)
直列化復元の際に、ObjectInputStream の信頼できるサブクラスが、あるオブジェクトをほかのオブジェクトに置換できるようにします。 |
protected Class |
resolveProxyClass(String[] interfaces)
プロキシクラス記述子で指定されたインタフェースを実装するプロキシクラスを返します。 |
int |
skipBytes(int len)
バイトをスキップします。 |
| クラス java.io.InputStream から継承したメソッド |
mark, markSupported, read, reset, skip |
| クラス java.lang.Object から継承したメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| インタフェース java.io.ObjectInput から継承したメソッド |
read, skip |
| コンストラクタの詳細 |
public ObjectInputStream(InputStream in)
throws IOException
セキュリティマネージャがインストールされている場合、ObjectInputStream.readFields メソッドまたは ObjectInputStream.readUnshared メソッドをオーバーライドするサブクラスのコンストラクタによって SerializablePermission("enableSubclassImplementation") が直接または間接に呼び出されたときに、このコンストラクタはこのアクセス権を確認します。
in - 読み込み元の入力ストリーム
StreamCorruptedException - ストリームヘッダが不正な場合
IOException - ストリームヘッダの読み込み中に入出力エラーが発生した場合
SecurityException - 信頼されていないサブクラスが、セキュリティ上重要なメソッドを不正にオーバーライドした場合ObjectInputStream(),
readFields(),
ObjectOutputStream.ObjectOutputStream(OutputStream)
protected ObjectInputStream()
throws IOException,
SecurityException
セキュリティマネージャがインストールされている場合、このメソッドはまずセキュリティマネージャの checkPermission メソッドをアクセス権 SerializablePermission("enableSubclassImplementation") で呼び出し、サブクラス化を有効にできるようにします。
SecurityException - セキュリティマネージャが存在し、その checkPermission メソッドがサブクラス化を有効にすることを拒否した場合
IOExceptionSecurityManager.checkPermission(java.security.Permission),
SerializablePermission| メソッドの詳細 |
public final Object readObject()
throws IOException,
ClassNotFoundException
ルートオブジェクトは、参照するフィールドとオブジェクトのすべてが復元された時、完全に復元されます。この時点で、それらの登録された優先順位に基づいて、オブジェクト検証コールバックが実行されます。このコールバックは、(特別な readObject メソッドの) オブジェクトによって、それらが個別に復元されるときに登録されます。
例外は、InputStream に関する問題や、直列化復元するべきではないクラスについてスローされます。すべての例外は、InputStream にとって致命的で、InputStream を不確定の状態にします。ストリームの状態を無視するか回復処理するかを決めるのは呼び出し側です。
ObjectInput 内の readObjectClassNotFoundException - 直列化されたオブジェクトのクラスが見つからなかった場合
InvalidClassException - 直列化で使用されるクラスになんらかの不具合があった場合
StreamCorruptedException - ストリームの制御情報に一貫性がない場合
OptionalDataException - プリミティブデータが、オブジェクトではなくストリームに見つかった場合
IOException - 入出力に関連した例外のどれかが発生した場合
protected Object readObjectOverride()
throws IOException,
ClassNotFoundException
ClassNotFoundException - 直列化されたオブジェクトのクラスが見つからなかった場合
OptionalDataException - プリミティブデータが、オブジェクトではなくストリームに見つかった場合
IOException - 基本となるストリームの読み込み中に入出力エラーが発生した場合ObjectInputStream(),
readObject()
public Object readUnshared()
throws IOException,
ClassNotFoundException
ただし、復元されたオブジェクトが java.lang.Class のインスタンスではなく、readResolve メソッドを定義していない場合、readUnshared から返されるオブジェクト参照は常に一意です。元になるデータストリームが操作されている場合でも、それを作成した ObjectInputStream からオブジェクト参照を再度取得することはできません。この規則は、readUnshared から返されたベースレベルのオブジェクトだけに適用され、返されたオブジェクトグラフ内で参照されるサブオブジェクトには適用されません。
このメソッドをオーバーライドする ObjectInputStream サブクラスは、SerializablePermission("enableSubclassImplementation") を持つセキュリティコンテキスト内だけで構築できます。このアクセス権を持たないセキュリティコンテキストでインスタンス化しようとすると、SecurityException がスローされます。
ClassNotFoundException - 直列化復元するオブジェクトのクラスが見つからなかった場合
StreamCorruptedException - ストリームの制御情報に一貫性がない場合
ObjectStreamException - 直列化復元するオブジェクトがすでにストリーム内にあった場合
OptionalDataException - ストリーム内の次のデータがプリミティブの場合
IOException - 直列化復元中に入出力エラーが発生した場合
public void defaultReadObject()
throws IOException,
ClassNotFoundException
ClassNotFoundException - 直列化されたオブジェクトのクラスが見つからなかった場合
IOException - 入出力エラーが発生した場合
NotActiveException - ストリームが現在オブジェクトを読み込んでいない場合
public ObjectInputStream.GetField readFields()
throws IOException,
ClassNotFoundException
GetField オブジェクト
ClassNotFoundException - 直列化されたオブジェクトのクラスが見つからなかった場合
IOException - 入出力エラーが発生した場合
NotActiveException - ストリームが現在オブジェクトを読み込んでいない場合
public void registerValidation(ObjectInputValidation obj,
int prio)
throws NotActiveException,
InvalidObjectException
obj - 検証のコールバックを受け取るオブジェクトprio - コールバックの順序を制御する値。0 が適切なデフォルト値である。早くコールバックする場合は大きい番号を、あとでコールバックする場合は小さい番号を使う。同じ優先順位内では、コールバックの処理に特別な順序はない
NotActiveException - ストリームが現在オブジェクトを読み込んでいないため、コールバックを登録できない場合
InvalidObjectException - 検証オブジェクトが null の場合
protected Class resolveClass(ObjectStreamClass desc)
throws IOException,
ClassNotFoundException
ObjectOutputStream の対応するメソッドは annotateClass です。このメソッドは、ストリームの一意のクラスそれぞれについて 1 回だけ呼び出されます。このメソッドは、代替のロード機構を使用するために実装することができますが、クラスオブジェクトを返す必要があります。クラスオブジェクトが返されると、そのクラスの serialVersionUID が、直列化されたクラスの serialVersionUID と比較されます。不一致があると、直列化復元に不具合が発生し、例外が呼び出されます。
デフォルトでは、クラス名は、readObject を呼び出したクラスと対応付けて解決されます。
desc - ObjectStreamClass クラスのインスタンス
v に対応する Class オブジェクト
IOException - 通常の入出力関連の例外が発生した場合
ClassNotFoundException - 直列化されたオブジェクトが見つからなかった場合
protected Class resolveProxyClass(String[] interfaces)
throws IOException,
ClassNotFoundException
このメソッドはストリームの一意の各プロキシクラス記述子について 1 回だけ呼び出されます。
ObjectOutputStream での対応するメソッドは annotateProxyClass です。このメソッドをオーバーライドする指定されたサブクラス ObjectInputStream に対して、ObjectOutputStream の対応するサブクラスにある annotateProxyClass メソッドはこのメソッドが読み込む任意のデータまたはオブジェクトを書き込む必要があります。
ObjectInputStream にあるこのメソッドのデフォルト実装は、interfaces パラメータで指定されたインタフェースの Class オブジェクトのリストとともに Proxy.getProxyClass の呼び出し結果を返します。各インタフェース名 i の Class オブジェクトが返されます。
Class.forName(i, false, loader)
ここで loader は、実行スタックまでの最初の null でないクラス、または null でないクラスローダがスタック側 (resolveClass メソッドが使用する同じクラスローダの選択) にない場合は null です。解決されたインタフェースが public でない場合は、同じ値の loader が Proxy.getProxyClass に渡されます。public でないインタフェースがある場合は、そのクラスローダが渡されます (public でないインタフェースのクラスローダが複数検出された場合は、IllegalAccessError がスローされる)。Proxy.getProxyClass が IllegalArgumentException をスローすると、resolveProxyClass は IllegalArgumentException とともに ClassNotFoundException をスローします。
interfaces - プロキシクラス記述子に直列化復元されたインタフェース名のリスト
IOException - 基本となる InputStream に例外が発生した場合
ClassNotFoundException - プロキシクラスまたは指定されたインタフェースがどれも見つからなかった場合ObjectOutputStream.annotateProxyClass(Class)
protected Object resolveObject(Object obj)
throws IOException
このメソッドは、オブジェクトが読み込まれたあと、readObject から復帰する前に呼び出されます。デフォルトの resolveObject メソッドは、同じオブジェクトだけを返します。
サブクラスは、オブジェクトを置換するとき、置換されたオブジェクトと、参照が格納される各フィールドとの互換性を保証する必要があります。フィールドまたは配列要素の型のサブクラスではない型のオブジェクトは、例外を発生させることによって直列化を中断し、その結果オブジェクトは格納されません。
このメソッドは、各オブジェクトが最初に検出されたときに 1 回だけ呼び出されます。これ以後検出されるそのオブジェクトへの参照は、新しいオブジェクトにリダイレクトされます。
obj - 置換されるオブジェクト
IOException - 通常の入出力関連の例外が発生した場合
protected boolean enableResolveObject(boolean enable)
throws SecurityException
enable が true で、セキュリティマネージャがインストールされている場合、このメソッドはまずセキュリティマネージャの checkPermission メソッドをアクセス権 SerializablePermission("enableSubstitution") で呼び出し、ストリームから読み込まれたオブジェクトの置換をストリームが許可できるようにします。
enable - 直列化復元される各オブジェクトについて resolveObject の使用を有効にする場合は true
SecurityException - セキュリティマネージャが存在し、その checkPermission メソッドが、ストリームから読み込まれたオブジェクトの置換をストリームが許可できるようにすることを拒否する場合SecurityManager.checkPermission(java.security.Permission),
SerializablePermission
protected void readStreamHeader()
throws IOException,
StreamCorruptedException
IOException - 基本となる InputStream の読み込み中に入出力エラーが発生した場合
StreamCorruptedException - ストリームの制御情報に一貫性がない場合
protected ObjectStreamClass readClassDescriptor()
throws IOException,
ClassNotFoundException
writeClassDescriptor メソッドをオーバーライドした ObjectOutputStream のサブクラスによって) 書き込まれたクラス記述子に読み込みます。デフォルトでは、このメソッドはクラス記述子をオブジェクト直列化仕様に定義された形式で読み込みます。
IOException - 入出力エラーが発生した場合
ClassNotFoundException - クラス記述子表現に使用した直列化されたオブジェクトのクラスが見つからなかった場合ObjectOutputStream.writeClassDescriptor(java.io.ObjectStreamClass)
public int read()
throws IOException
ObjectInput 内の readInputStream 内の readIOException - 入出力エラーが発生した場合
public int read(byte[] buf,
int off,
int len)
throws IOException
ObjectInput 内の readInputStream 内の readbuf - データの読み込み先のバッファoff - データの開始オフセットlen - 読み込まれる最大バイト数
IOException - 入出力エラーが発生した場合DataInputStream.readFully(byte[],int,int)
public int available()
throws IOException
ObjectInput 内の availableInputStream 内の availableIOException - 基本となる InputStream の読み込み中に入出力エラーが発生した場合
public void close()
throws IOException
ObjectInput 内の closeInputStream 内の closeIOException - 入出力エラーが発生した場合
public boolean readBoolean()
throws IOException
DataInput 内の readBooleanEOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public byte readByte()
throws IOException
DataInput 内の readByteEOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public int readUnsignedByte()
throws IOException
DataInput 内の readUnsignedByteEOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public char readChar()
throws IOException
DataInput 内の readCharEOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public short readShort()
throws IOException
DataInput 内の readShortEOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public int readUnsignedShort()
throws IOException
DataInput 内の readUnsignedShortEOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public int readInt()
throws IOException
DataInput 内の readIntEOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public long readLong()
throws IOException
DataInput 内の readLongEOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public float readFloat()
throws IOException
DataInput 内の readFloatEOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public double readDouble()
throws IOException
DataInput 内の readDoubleEOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public void readFully(byte[] buf)
throws IOException
DataInput 内の readFullybuf - データの読み込み先のバッファ
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public void readFully(byte[] buf,
int off,
int len)
throws IOException
DataInput 内の readFullybuf - データの読み込み先のバッファoff - データの開始オフセットlen - 読み込む最大バイト数
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public int skipBytes(int len)
throws IOException
DataInput 内の skipByteslen - スキップするバイト数
EOFException - ファイルの終わりに達した場合
IOException - ほかの入出力エラーが発生した場合
public String readLine()
throws IOException
DataInput 内の readLineIOException - 基本となる InputStream の読み込み中に入出力エラーが発生した場合
public String readUTF()
throws IOException
DataInput 内の readUTFIOException - 基本となる InputStream の読み込み中に入出力エラーが発生した場合
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.