top / index / prev / next / target / source

2002-12-10 diary: C++用Javaストリーム風クラス作成中…

いがぴょんの日記 日記形式でつづる いがぴょんコラム ウェブページです。

old-v2

C++用Javaストリーム風クラス作成中…

結構品揃えが増えてきました。

チューリップ本その後

先日 梅田紀伊国屋に行ったら 私のチューリップ本は 平積み状態が解除されていました (T_T)ちょっと寂しかったです。撤去されたわけではなくって 立てて並べられていました。良い夢を見させて頂きました (笑)

C++用Javaストリーム風クラスを作成中です

みなさまにお断り。このC++クラスはフリーソフト的には公開できないでしょう。とりあえずは 自分用メモということで…下記のようなクラスを作成しました。(当然 クラスメイトファイル名とは一致させています)

上記のクラスが揃いました。もちろん必要なメソッドしか実装していませんが…。このクラスを利用したら、下記のようにコーディングできます。ちょっとJavaっぽく見えます。

ちょっとデータをMIME BASE64化する例。

    try
    {
        io_InputStream* fileRead =
            new io_BufferedInputStream(
                new io_FileInputStream((unsigned char*)"aaa.txt"));
        io_OutputStream* fileWrite =
            new nbb_MimeOutputStream(
                new io_BufferedOutputStream(
                    new io_FileOutputStream((unsigned char*)"bbb.txt")));
        unsigned char szBuf[1024 + 1];
        for (;;)
        {
            int read = fileRead->read(szBuf, 0, 1024);
            if (read < 0)
                break;
            fileWrite->write(szBuf, 0, read);
        }
        fileWrite->close();
        fileRead->close();
        delete fileRead;
        delete fileWrite;
    }
    catch (io_IOException* ex)
    {
        printf("Error occur: %s", ex->toString());
        delete ex;
    }

HTMLファイルをダウンロードする例。

        net_URL* url = new net_URL((unsigned char*)"http://www.tcct.zaq.ne.jp/iga/tosiki/igapyon/diary/");
        net_URLConnection* conn = url->openConnection();
        io_InputStream* fileRead =
            new io_BufferedInputStream(
                conn->getInputStream()
            );
        io_OutputStream* fileWrite =
            new io_BufferedOutputStream(
                new io_FileOutputStream((unsigned char*)"ddd.txt"));

        for (;;)
        {
            int read = fileRead->read(szBuf, 0, 1024);
            if (read < 0)
                break;
            fileWrite->write(szBuf, 0, read);
        }
        fileWrite->close();
        fileRead->close();
        delete fileRead;
        delete fileWrite;
        delete conn;
        delete url;

ずいぶん幸せな気持ちになることができます。Javaの良い点の一つは 良くこなれたAPIセットの存在なのですもの。あとはこのまま MD5ダイジェストストリームとGZIPストリームが出来上がったら完成です。もうちょっと頑張ろう…。(なんでも自作してしまう癖はなかなか治りませんなぁ…)

Java APIをC++に移植して分かったのですが、全てをヘッダーファイルで表現することは出来ませんでした。クラスを相互に参照するため、とりあえず *.cpp を利用する必要がありました。これはちょっと残念。というか C++言語ってそういうものですよね。

POSTする場合のコードで一点気になったのが、WinInetでは 事前に送信サイズがわかっていないといけないのですが、Java API では そのような取り決めはありません。これはなぜだろうと思いました。

世間のニュースから () 2002


この日記について