|
CDC 1.1.2 | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
public interface Datagram
このクラスは、データグラムパケットの抽象インタフェースを定義します。このインタフェースの実装には、DatagramConnection
オブジェクトとの間で送受信されるデータが格納されます。
これはインタフェースクラスなので、データグラムパケットの内部構造は、ここでは定義されません。しかし、このインタフェースの各実装は、次のフィールド/状態変数 (実際の実装とこれらのフィールドの名前は異なる可能性がある) を提供することになっています。
読み取りと書き込み
Datagram
インタフェースは、DataInput
インタフェースと DataOutput
インタフェースを拡張することにより、getData
メソッドや setData
メソッドを使用しないで、データグラムバッファーのバイナリデータの読み取り/書き込みを単純に実行できるようにします。書き込みを行うと、length の値が自動的に大きくなります。読み取りは、read/write pointer の値が length の値より小さい間、続行されます。書き込みの実行前に、reset を呼び出す必要があります。読み取り/書き込み時に setData()
を使用した場合、offset
パラメータの値として使用できるのはゼロだけになります。
次に、データグラムへの書き込みの例を示します。
datagram = connection.newDatagram(max); // reset により、データグラムに新しいメッセージを書き込む準備を行う。 datagram.reset(); // writeUTF はデータグラムの長さの値を自動的に大きくする。 datagram.writeUTF("hello world"); connection.send(datagram);次に、データグラムからの読み取りの例を示します (単独使用のみ)。
datagram = connection.newDatagram(max); connection.receive(datagram); message = datagram.readUTF();データグラムの再利用
前述の length は getLength
によって返され、そのつど意味が異なる可能性があることに注意してください。たとえば送信時、length は送信バイト数を表します。受信前、length は最大受信可能バイト数を表します。受信後、length は受信済みバイト数を表します。このため、送受信を行なったあと、データグラムを再利用して受信を行う場合は、setLength
を使用して、length を最大受信可能バイト数に設定し直してください。
datagram = connection.newDatagram(max); while (notDone) { // ループ内の前回の受信で length が変更されたので // この値を最大受信可能バイト数に戻す datagram.setLength(max); connection.receive(datagram); data = datagram.getData(); bytesReceived = datagram.getLength(); // データグラムの処理... }読み取り時は、
getData
ではなく reset
メソッドを使用します。
datagram = connection.newDatagram(max); while (notDone) { // ループ内の前回の読み取りで読み取りポインタが変更されたので // ポインタをリセットする datagram.reset(); datagram.setLength(max); connection.receive(datagram); message = datagram.readUTF(message); // メッセージ処理... }データグラムを再度読み込む場合は、次のようになります。
connection.receive(datagram); message = datagram.readUTF(message); len = datagram.getLength(); datagram.reset(); datagram.setLength(len); copy = datagram.readUTF(message);
メソッドの概要 | |
---|---|
String |
getAddress()
データグラムのアドレスを取得します。 |
byte[] |
getData()
データバッファーの内容を取得します。 |
int |
getLength()
データグラムの長さを取得します。 |
int |
getOffset()
オフセットを取得します。 |
void |
reset()
read/write pointer と、状態変数 offset および length の値をゼロにします。 |
void |
setAddress(Datagram reference)
データグラムアドレスを設定して、別のデータグラムからアドレスをコピーします。 |
void |
setAddress(String addr)
データグラムアドレスを設定します。 |
void |
setData(byte[] buffer,
int offset,
int len)
状態変数 buffer 、offset 、および length を設定します。 |
void |
setLength(int len)
length 状態変数を設定します。 |
インタフェース java.io.DataInput から継承されたメソッド |
---|
readBoolean, readByte, readChar, readDouble, readFloat, readFully, readFully, readInt, readLine, readLong, readShort, readUnsignedByte, readUnsignedShort, readUTF, skipBytes |
インタフェース java.io.DataOutput から継承されたメソッド |
---|
write, write, write, writeBoolean, writeByte, writeBytes, writeChar, writeChars, writeDouble, writeFloat, writeInt, writeLong, writeShort, writeUTF |
メソッドの詳細 |
---|
String getAddress()
datagram://{host}:{port}
」の形式のアドレス。アドレスが設定されていない場合は null
setAddress(java.lang.String)
byte[] getData()
実装によっては、この操作を実行すると、内部バッファーかそのコピーが返されることがあります。しかし、この操作の実行後に返されたデータを変更して、内部データバッファーの内容を操作できるとは考えてはいけません。内部バッファーの内容を変更するには、setData
操作を使用してください。
setData(byte[], int, int)
int getLength()
setLength(int)
int getOffset()
void setAddress(String addr) throws IOException
datagram://{host}:{port}
」の形式にします。 データグラムのアドレスを指定しないと、そのアドレスのデフォルト値は接続のアドレスになります。
addr
- URL として指定する新しいターゲットアドレス
IllegalArgumentException
- アドレスが無効な場合
IOException
- なんらかの入出力エラーが発生した場合getAddress()
void setAddress(Datagram reference)
reference
- このデータグラムの新しいターゲットアドレスとしてコピーされるアドレスを持つデータグラム
IllegalArgumentException
- アドレスが無効な場合getAddress()
void setLength(int len)
length
状態変数を設定します。
len
- データグラムの新しい長さ
IllegalArgumentException
- 長さまたは長さとオフセットの和がバッファーの大きさを超える場合getLength()
void setData(byte[] buffer, int offset, int len)
buffer
、offset
、および length
を設定します。実装により、この操作を実行すると、バッファーがコピーされる場合も、状態変数 buffer
に buffer
引数の値が設定されるだけの場合もあります。しかし、この操作に渡されたバッファーを変更して、内部データバッファーの内容を操作できるとは考えてはいけません。
buffer
- データバッファーoffset
- データバッファー内のオフセットlen
- バッファー内のデータの長さ
IllegalArgumentException
- 長さ、オフセット、またはオフセットと長さの和がバッファーの大きさを超える場合、あるいはバッファーパラメータが無効な場合getData()
void reset()
read/write pointer
と、状態変数 offset
および length
の値をゼロにします。
|
CDC 1.1.2 | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |