|
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||
java.lang.Objectnet.excentrics.bandWidth.SocketChannelWriter
public class SocketChannelWriter
java.nio.SocketChannelの送信帯域を制限するためのクラスです。
全てのメソッドはスレッドセーフではありません。
受信の帯域を制限する機能は現在実装されていません。
使い方
ByteBuffer buf = ByteBuffer.allocate(BUFSIZE);
SocketChannel sc = serverSocketChannel.accept();
//制限速度をbandWidthに設定
SocketChannelWriter scw = new SocketChannelWriter(sc,bandWidth);
while(//バッファーにデータを読み込む){
long nextTime = scw.write(buf);
sleep(nextTime);
}
| コンストラクタの概要 | |
|---|---|
SocketChannelWriter(java.nio.channels.SocketChannel channel,
double bandWidth)
SocketChannelWriterを生成します。 |
|
| メソッドの概要 | |
|---|---|
double |
getBandWidth()
制限速度を返します。 |
void |
setBandWidth(double bandWidth)
制限速度を変更します。 |
long |
write(java.nio.ByteBuffer buffer)
帯域制限をかけた送出を行います。 |
| クラス java.lang.Object から継承されたメソッド |
|---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
|---|
public SocketChannelWriter(java.nio.channels.SocketChannel channel,
double bandWidth)
channel - データの送信を行うチャネルbandWidth - 制限速度(bit per second)| メソッドの詳細 |
|---|
public double getBandWidth()
public void setBandWidth(double bandWidth)
bandWidth -
public long write(java.nio.ByteBuffer buffer)
throws java.io.IOException
帯域制限をかけた送出を行います。
このメソッド呼び出しがブロックされることはありません。
戻り値は無視しても帯域制限は行われますが、不要なCPUリソースの消費を 避けるためには戻り値を利用してください。
buffer - 送出するデータが入ったバッファ。
制限速度をbyte単位に変更した時の10分の1以上のサイズが推奨されます。
つまりgetBandWidth() / 8 / 10 以上です。
この戻り値の時間が経過しないうちに再びこのメソッドを呼び出しても おそらく0バイトの送出が行われます。よって適切に帯域制限は行われますがCPU リソースを無駄に消費するだけなので、(write()は呼び出されると必ず、何バイト送出 するべきかの計算を行います。)この時間の間送出スレッドをsleep()させるなり の処理を行うことが推奨されます。
java.io.IOException - SocketChannelが例外を発生させた場合。
|
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||