CENTER検索メインメニューコンテンツへスキップ検索:「IO・ネットワーク」カテゴリーアーカイブIO・ネットワークIPv6※v8.0からサポートされました。サポート※v8.0からサポートされました。おいてHttpOnly属性を持つCookieをサポートしています。特権アプレットはHttpOnly属性を持つCookieにアクセスすることが出来ます。非特権アプレットの場合は、セキュリティ例外がスローされます。IO・ネットワークオブジェクトのシリアル化オブジェクトのシリアル化(直列化)とは,オブジェクトの内部状態をバイトストリームに変換し,そのバイトストリームから再び元と同じ内容を持ったオブジェクトを再現することができる機能のことです。すべてのデータクラスをシリアル化できるのではなく、serializableとして宣言する必要があります。このような機能はJavaやActionScript(AMF0、AMF3)にもあります。使い方を説明していきます。CURL.IO.SERIALIZEパッケージをインポートします。CURL.IO.SERIALIZE}次に対象となるデータクラスを宣言します。このクラスはserializableとして宣言します。self.value}}}シリアライズするには、SerializeOutputStreamのwrite-oneメソッドを利用します。以下の例では、ファイル(test.byte)にシリアライズしたデータ(AAA)を保存しています。“123”}}}逆にデシリアライズ(バイトストリームから元のオブジェクトを生成)するには、deserializeプロシージャを利用します。ここでは上記で作成したファイルを読み込み、オブジェクトを生成しています。123IO・ネットワーク圧縮・解凍Curlで圧縮及び解凍する方法を記載します。Curlでは圧縮フォーマットにgzipとzlibをサポートしております。これを利用するには、CURL.IO.ZSTREAMパッケージをインポートします。CURL.IO.ZSTREAM}この中のDeflateByteOutputStreamにて圧縮ストリームを生成し、InflateByteInputStreamにて解凍ストリームを生成することができます。以下に圧縮ファイルへの書き出しのサンプルコードを記載します。written}}}}}}上記のサンプルプロシージャを用いて、以下のようにテキストファイルを圧縮し、圧縮ファイルに書き出すことができます。“a.gz”}}また、上記で圧縮したファイルを以下のサンプルプロシージャで解凍します。num-read}}}}}}以下のようにサンプルプロシージャを実行し、解凍ファイルを取得します。“ab.txt”}}これらにより、HTTP圧縮・解凍の仕組みを実装することも可能です。サンプルコード圧縮・解凍サンプルコードIO・ネットワークコンテンツの読込み・書き込み外部リソースについてCurlアプリケーションでは外部リソースから情報を取得したり外部の送信先に情報を送信する必要があるケースがほどんとです。一般的に以下のような場所でデータがあります。ファイルディスクネットワーク上メモリ別のプログラムあるいはプロセスCurlはありとあらゆるファイル(テキスト、バイナリ、イメージ)・Webページなどのリソースに対しデータの読込・書込を行うことができます。ファイルシステム内にある場合はファイルの削除や名前の変更など、一部データリソースを操作することができます。テキストファイルの読込ほとんど多くの場合データはテキスト形式で保持されてます。テキストファイルを読み取るにはTextInputStreamオブジェクトを作成する必要があります。TextInputStreamオブジェクトはリソースから一連のデータを取り表すストリームクラスの1つです。ちなみにローカルディスク上のファイルの読み取りと、ネットワークまたは他のソース上のデータのストリームからの読み取りは同じです。ネットワークリソースと対話(Httpのpostメソッドやgetメソッドなどを使用して)する場合はCurlからリクエストデータおよび返却データを受け渡しする必要があるので少し変わってきます。そちらについては「逆引きリファレンス-サーバー連携」を参照してください。以下にネットワーク上(あるいはローカルファイルシステム)のテキストファイルを読み込むサンプルをご紹介します。“business.txt”}}}上記のサンプルはread-fromプロシージャを使用したサンプルで、read-fromプロシージャは第一引数のUrlを指定するだけでそのコンテンツを文字列として読込み、StringBufという文字列のオブジェクトを返却します。上記の例ではpreマクロを使用して読込み結果を表示しています。テキストファイルの一行づつの読み取りread-fromプロシージャはコンテンツのすべての内容を文字列オブジェクト(StringBuf)に読込みますが、コンテンツがCSVデータのような場合は1行づつ読み込んで処理することが多いと思います。以下に1行づつ読み込むサンプルを紹介します。line}}}display}上記のサンプルは少し複雑ですが以下にポイントを説明します。文字列の配列を作る(これはコンテンツから読み込んだ1行づつの内容を保持するためです。)read-openプロシージャを使用してTextInputStreamオブジェクトを生成する。TextInputStreamクラスのread-one-lineメソッドを使用して一行ずつ読込み、最終行(EOF)まで1の文字列の配列に格納していく。上記のステップでシーケンシャルファイルを一行ずつ読み込むことができます。イメージの読込みイメージを簡単に読み込むにはimageテキストプロシージャを使用する方法があります。以下にImageテキストプロシージャを使用したサンプルをご紹介します。下の幅(width)と高さ(height)を設定すると指定したサイズになります。指定してない場合はイメージのサイズが適用されます。“画像の説明を記述したりします。”}}サポートしているイメージファイル形式は以下の通りです。複数イメージのファイルの最初のイメージのみ。追加のイメージにアクセスするには、ImageDataクラスを使用する必要があります。書込について書込みの手順も基本的に読込と同じになります。使用するクラスはTextOutputStreamクラスを使用します。→テキストファイルへの書き込み」を参照してください。上記で紹介したテキストおよびイメージデータ以外にも様々なデータにアクセスすることができます。バイナリデータや圧縮データです。同期読み取りだけでなくAjaxなどで注目された非同期読み取りももちろん可能です。詳しくは「Curl開発者ガイド→外部リソースとの対話→ファイルやその他のリソースへのアクセス」を参照してください。IDなどの設定情報を格納しています。パーシスタントデータという小さなサイズのデータを格納する機能を提供しています。具体的にサンプルを見ていきましょう。プライベートパーシスタントデータこれは、1つのアプレットのみからアクセス可能なパーシスタントデータです。これらを扱うためにまずは管理のためのリポジトリをpersistent-dataというプロシージャにより作成する必要があります。この際に有効期限等を設定することもできます。1024}リポジトリ作成後、以下のようにパーシスタントデータを取得(set-persistent-data)やセット(get-persistent-dataプロシージャ)することができます。{DateTime}}}{commit-persistent-data}扱える型としては、null、プリミティブ形、String、FastArray-of、Array-of、HashTable-ofなどがあります。(詳細はCurlヘルプを参照ください。)set-persistent-data後、値をコミットするためにcommit-persistent-dataプロシージャを実行する必要があります。注意事項として、アプレットは最大で20までのリポジトリと256Kまでのデータしか扱うことができません。リポジトリを作成することができます。これを利用するには、共有のscurlを作成し、その中でpersistent-dataプロシージャを呼び出す必要があります。1024}一方、各アプレットでは、パーシスタントデータを利用する前にget-persistent-data-repositoryプロシージャを用いてリポジトリ(Repositoryオブジェクト)を取得する必要があります。この際、上記の共有scurlのパスを指定する必要があります。その後、プライベートと同様にget-persistent-data/set-persistent-dataを用いてパーシスタントデータを上記で取得したRepositoryオブジェクトを指定して扱うことができます。repo}サンプルコードのダウンロードパーシスタントデータのサンプルIO・ネットワークソケット通信ソケットとは通信を行うアプリケーションの仮想的なインターフェースのことです。サーバは指定したポート番号でクライアントからの接続を待ち、クライアントはIPアドレスもしくはホスト名とポート番号を指定してサーバに接続します。接続が成功するとサーバ、クライアントともにソケットが生成され、そのソケットに対してデータ送受信を行うことができます。Curlでは、ソケットサーバ及びクライアントを実装することができます。TCPサーバ以下は、TCPサーバのコードサンプルです。“back!”}}}}finally{socket.close}}}AcceptorTCPSocketクラスをnewすることによりサーバソケットを生成し、bindメソッドを実行することで、ローカルアドレスの指定したポートにバインドします。ここでbindメソッドの引数としてクライアントから受信した際に発生させるイベントAcceptableSocketEventをacceptable-handler引数にセットします。ここでは、受信した場合にクライアントから送信されたストリームデータを文字列として表示し、結果をOutputStreamとして返しています。TCPクライアント以下は、TCPクライアントのコードサンプルです。true}}}}finally{socket.close}}DataTCPSocketクラスを用いてクライアントソケットを生成し、connectメソッドにてサーバに接続します。サーバにデータを送信するには、ソケットのto-OutputStreamメソッドでOutputStreamを生成し、データを書き込みます(writeメソッド)。サンプルでは、サーバからのレスポンスをソケットのto-InputStreamメソッドによりInputStreamを受け取り、コンソールに出力しています。ソケットを閉じるにはcloseメソッドを利用します。CurlではUDPサーバ及びクライアントも取り扱うことができますし、非同期通信も可能となっています。詳細はCurlのヘルプをご確認ください。XML)という名前の通り、XMLHttpRequestというクラスを利用しAsynchronous(非同期通信)を実現できるという点が取り上げられ流行しています。Curlでも非同期通信を実現できるので、実装方法を紹介していきたいと思います。以下に、サーバへアクセスし、応答結果をアプレット上に表示するというサンプルコードを紹介していきます。{buf.to-String}}}out}サーバのURLからHttpFileオブジェクトを生成します。そのHttpFileオブジェクトのread-openメソッドを利用しサーバへリクエストします。サンプルコードも同様に結果をアプレットに表示します。非同期ではリクエストした結果を受け取った際に実行するためのコールバックプロシージャを用意します。以下のサンプルでは、callback-procプロシージャを用意し、非同期通信処理の終了後にこのプロシージャに結果を引数として渡して実行されるようにしています。{buf.to-String}}{tis.close}}}}}}}out}HttpFileオブジェクトを生成するところまでは同期通信と同様ですが、非同期通信ではHttpFileオブジェクトのasyn-read-openメソッドを利用し、サーバにリクエストします。非同期通信の場合は結果を受け取るとAsyncFileOpenEventが発生し、このイベントのstreamゲッターから結果のストリームデータを取得することとなります。非同期処理は例外をキャッチできないため、例外もAsyncFileOpenEventのexceptionゲッターから取得します。ストリームデータを非同期に読み込むために、TextInputStreamにはasync-read-stringメソッドが用意されています。コードサンプルのダウンロード通信のコードサンプルIO・ネットワークローカルファイルアクセスブラウザ上のWebアプリケーションではローカルファイルへのアクセスが制限されていますが、Curlでは簡単にアクセスすることができます。(但し、セキュリティ面を考慮しており、特権の設定が必要となります。)では、具体的にサンプルを見ていきましょう。ファイルの読み込みread-fromプロシージャを利用し、簡単にファイルを読み込むことができます。“test1.txt”}}ファイルの書き込みwrite-toプロシージャを利用し、簡単にファイルへ書き込みを行うことができます。以下のサンプルコードのようにコピーや名前変更、削除も1行で記述することができます。“test3.txt”}}ディレクトリ作成ディレクトリの作成も以下のように簡単にできます。