## net.excentrics.bandWidth
クラス SocketChannelWriter

    java.lang.Object
      net.excentrics.bandWidth.SocketChannelWriter

    public class SocketChannelWriter

extends java.lang.Object

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);
                    }

バージョン:
  0.9
作成者:
  senju

コンストラクタの概要
`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`

コンストラクタの詳細

### SocketChannelWriter

    public SocketChannelWriter(java.nio.channels.SocketChannel channel,
                               double bandWidth)

  SocketChannelWriterを生成します。

  パラメータ:
    `channel` - データの送信を行うチャネル
    `bandWidth` - 制限速度(bit per second)

メソッドの詳細

### getBandWidth

    public double getBandWidth()

  制限速度を返します。

  戻り値:
    現在設定されている制限速度(bit per second)

### setBandWidth

    public void setBandWidth(double bandWidth)

  制限速度を変更します。

  パラメータ:
    `bandWidth` -

### write

    public long write(java.nio.ByteBuffer buffer)
               throws java.io.IOException

  帯域制限をかけた送出を行います。

  このメソッド呼び出しがブロックされることはありません。

  戻り値は無視しても帯域制限は行われますが、不要なＣＰＵリソースの消費を 避けるためには戻り値を利用してください。

  パラメータ:
    `buffer` - 送出するデータが入ったバッファ。

    制限速度をbyte単位に変更した時の10分の１以上のサイズが推奨されます。

    つまりgetBandWidth() / 8 / 10 以上です。

  戻り値:
    次回このメソッドを呼び出すまでの時間をミリ秒で返します。
    つまり 「戻り値ミリ秒」経過してから続きのデータを送出してください。

    この戻り値の時間が経過しないうちに再びこのメソッドを呼び出しても おそらく0バイトの送出が行われます。よって適切に帯域制限は行われますがＣＰＵ リソースを無駄に消費するだけなので、(write()は呼び出されると必ず、何バイト送出 するべきかの計算を行います。)この時間の間送出スレッドをsleep()させるなり の処理を行うことが推奨されます。

  例外:
    `java.io.IOException` - SocketChannelが例外を発生させた場合。