|
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 | |||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||