2006 年 12 月 18 日 20 時 24 分

RFBOutputStream クラス


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


ええ、今日は手抜きです。手抜きですとも。
でも InputStream 作ったなら OutputStream もいるでしょ?

========== RFBOutputStream.java ==========

package jp.loafer.rfb.io;

import java.io.IOException;
import java.io.OutputStream;
import java.io.FilterOutputStream;
import java.io.DataOutputStream;

/**
* RFB の基本型を扱う出力ストリームクラス。
* @author kes
*/
public class RFBOutputStream extends FilterOutputStream {

    /**
     * {@link RFBOutputStream} のインスタンスを作成。
     * @param out
     */
    public RFBOutputStream(OutputStream out) {
        super(new DataOutputStream(out));
    }

    /**
     * 8 ビット符号なし整数を書き出す。
     * @param value 8 ビット符号なし整数。
     * @throws IOException 出力エラー。
     */
    public void writeU8(int value) throws IOException {
        ((DataOutputStream)out).writeByte(value);
    }

    /**
     * 16 ビット符号なし整数を書き出す。
     * @param value 16 ビット符号なし整数。
     * @throws IOException 出力エラー。
     */
    public void writeU16(int value) throws IOException {
        ((DataOutputStream)out).writeShort(value);
    }

    /**
     * 32 ビット符号なし整数を書き出す。
     * @param value 32 ビット符号なし整数。
     * @throws IOException 出力エラー。
     */
    public void writeU32(long value) throws IOException {
        ((DataOutputStream)out).writeInt((int)value);
    }

    /**
     * 8 ビット符号つき整数を書き出す。
     * @param value 8 ビット符号つき整数。
     * @throws IOException 出力エラー。
     */
    public void writeS8(int value) throws IOException {
        ((DataOutputStream)out).writeByte(value);
    }
   
    /**
     * 16 ビット符号つき整数を書き出す。
     * @param value 16 ビット符号つき整数。
     * @throws IOException 出力エラー。
     */
    public void writeS16(int value) throws IOException {
        ((DataOutputStream)out).writeShort(value);
    }

    /**
     * 32 ビット符号つき整数を書き出す。
     * @param value 32 ビット符号つき整数。
     * @throws IOException 出力エラー。
     */
    public void writeS32(int value) throws IOException {
        ((DataOutputStream)out).writeInt(value);
    }

    /**
     * 可変長文字列を書き出す。
     * @param value 文字列。
     * @throws IOException 出力エラー。
     */
    public void writeString(String value) throws IOException {
        if (value == null) {
            writeS32(0);
            return;
        }
        byte[] buffer = value.getBytes("ISO-8859-1");
        writeS32(buffer.length); // U32
        ((DataOutputStream)out).write(buffer);
    }

}


========== end of RFBOutputStream.java ==========

RFBInputStream をコピーして置換っと。

    s/read/write/g;
    s/Input/Output/g;
    s/in/out/g; # 単語単位
    s/@return/@param value/g;
    s/public (\w+) (\w+)\(\)/public void $2($1 value)/g;
    s/return (?:\(\w+\))?(.*)\(\);/$1(value);/g;
    s/Unsigned//g;
    s/読み込む/書き出す/g;
    s/入力/出力/g;

後はちょこっと修正するだけで出力ストリームの完成だ。
……エディタは偉大なり。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.