DefineInputStreamMethod

DefineInputStreamMethod["name",{"fname1"function1,"fname2"function2, }]

Wolfram言語が入力ストリームを開き,そこから読み込むために,ストリーム関数 functioni を呼ぶことを許可する,指定された名前のカスタム入力ストリームメソッドを定義する.

詳細とオプション

  • 入力ストリームメソッドは,バイトの新たなソース,バイトストリームをフィルターする方法,あるいは両者の組合せを提供する.
  • 次のストリーム関数を使うことができる.
  • "NameTestFunction"指定された名前のストリームを開くことができるかどうか
    "ConstructorFunction"新たなストリームが開かれたときに呼ばれる
    "CloseFunction"ストリームを閉じ,そのリソースを解放する
    "ReadFunction"ストリームからバイトを読む
    "EndOfFileQFunction"ストリームにこれ以上読み込む入力がないかどうかを示す
    "WaitForInputFunction"読み込む入力が現れるまで待つ
    "SeekFunction"入力が読み込まれるストリーム中の点の位置を変える
    "StreamPositionFunction"入力が読み込まれているストリーム中の現行点
    "StreamSizeFunction"ストリームから読み込むことができるバイト数
    "SeekableQFunction"入力が読み込まれる点の位置を,ストリームメソッドが変えられるかどうか
    "ErrorTextFunction"エラーがあったかどうかを示す
    "ClearErrorFunction"エラーの表示をクリアする
    "OptionChangesFunction"Options[stream]によって返されたオプションを変更する
  • DefineInputStreamMethodに渡さなければならないのは"ConstructorFunction"だけである.関数が与えられない場合,他のすべての関数にはデフォルトの定義がある.
  • ストリームメソッドによって開かれた各InputStreamには現行状態がある.ストリームメソッドは,ここに,もとになるストリームリソースへのハンドル,現行のストリーム位置,直近のエラーメッセージ,その他ストリームメソッド関数が必要とする情報等の情報を保存する.初期状態の式は"ConstructorFunction"によって返される.その他の関数は現行状態をパラメータとして取り,新たな状態の値を返す.
  • 新たな状態の値を返す関数が提供されていない場合,デフォルトの定義が与えられた状態を未加工で返す.
  • 入力ストリームを開閉するための関数
  • 名前パラメータ戻り値
    "NameTestFunction"{streamname}True|False
    "ConstructorFunction"{streamname,caller,opts}{success,state}
    "CloseFunction"{state}ignored
  • "NameTestFunction"は,ストリームがMethod->Automaticによって開かれた場合に必要である.Wolfram言語は streamname に基づいて使用するストリームメソッドを選ぶ必要がある."NameTestFunction"Trueを返す場合にはストリームメソッドが使われる."NameTestFunction"が与えられていなければ,デフォルト動作がFalseを返す.
  • ストリームが読み込むために開かれた場合には,"ConstructorFunction"が呼ばれる.これは streamname (ファイル名,URL,その他ストリームメソッドに適したリソースを指示するもの)が示すストリームを開く.caller 引数はメッセージを発する記号である.successTrueの場合に OpenReadのような呼出し関数がInputStreamの作成を完了する.state はストリームメソッド状態の初期値として使われる.
  • Close[st]が呼ばれた場合には,"CloseFunction"がストリーム st に使われる."ConstructorFunction"で割り当てられたリソースはここで割当てを解除される.デフォルトの定義は何もしない.
  • ストリームから読み込む関数
  • 名前パラメータ戻り値
    "ReadFunction"{state,n}{{byte1,...,byten},newstate}
    "EndOfFileQFunction"{state}{flag,newstate}
    "WaitForInputFunction"{state}{ignored,newstate}
  • "ReadFunction"はストリームから読み込むための基本的な関数である.これは引数 n を取り,0から255までの整数による n のバイトのリストを返す.ストリームがファイルの末尾であった場合や,読み込み中にエラーがあった場合には,少ないバイト数が返されることがある.そのような場合には "EndOfFileQFunction"および"ErrorTextFunction"を使って原因が決定される."ReadFunction"が提供されていない場合はデフォルト定義がバイト数の空リストを返す.
  • "EndOfFileQFunction"はストリームからの読み込み過程で使わる.ストリームメソッドは一般にこの関数を提供する.この関数は,"ReadFunction"によってストリームの最終バイトが返された場合にTrueを返す.デフォルト定義はTrueを返す.
  • "WaitForInputFunction"はストリームからの読み込み過程で使われる.このメソッドは,パイプから他の過程へのような入力が間欠的に使用可能なソースから読み込むストリームメソッドにとって役に立つ.そのような場合には,ストリームメソッドの"ReadFunction"が入力を決して待たず,可能なバイトのみを返すようにすべきである."WaitForInputFunction"は,これが入力を待つ場所である.デフォルト定義は何もしない.
  • ストリームのサイズと位置を読み込み設定するための関数
  • 名前パラメータ戻り値
    "StreamPositionFunction"{state}{position,newstate}
    "StreamSizeFunction"{state}{size,newstate}
    "SeekableQFunction"{state}{flag,newstate}
    "SeekFunction"{state,offset}{success,newstate}
  • "StreamPositionFunction"StreamPositionをサポートするために使われる.position 結果は開かれたストリーム中の現行点の位置を示す整数である.-1という position はストリーム位置が未知であることを示す.デフォルト定義は -1という position を返す.
  • "StreamSizeFunction"はストリームからの読み込み過程で使われる.正確なストリームサイズでこの関数を提供するストリームメソッドはそうではないストリームメソッドよりも高速なことがある.結果のサイズはストリーム中の総バイト数を示す整数であり,サイズが不明の場合は-1である.デフォルトの定義は-1という size を返す.
  • "SeekableQFunction"SetStreamPositionをサポートするために使われる."SeekFunction"を提供するストリームメソッドはTrueを返す"SeekableQFunction"を提供しなければならない.デフォルト定義はFalseを返す.
  • "SeekFunction"SetStreamPositionをサポートするために使われる.ストリームメソッドがストリーム位置の設定をサポートしない場合はこの関数は提供されなくてもよいが,"SeekableQFunction"Falseを返さなければならない.この関数は offset とともに呼ばれる.これは,ストリームの開始位置と相対的なバイト位置を示す非負の整数かストリームの最終位置を示すInfinityかである.この関数は探索が成功した場合はTrueを返さなければならない.
  • エラーを操作するための関数
  • 名前パラメータ戻り値
    "ErrorTextFunction"{state,nbytes}{result,newstate}
    "ClearErrorFunction"{state}{ignored,newstate}
  • "ErrorTextFunction"はストリームからの読込み過程で使われる.これは,エラーがある場合はエラーメッセージStringを返し,エラーがない場合はNullを返す.Wolfram言語は,他の関数が故障を示す場合に,例えば"ReadFunction"が要求より少ないバイトを返した場合や"EndOfFileQFunction"False
    を返した場合にこの関数を呼ぶ.デフォルト定義はNullという result を返す.
  • "ClearErrorFunction""ErrorTextFunction"がエラー文字列を返しエラー状態をクリアする場合に呼ばれる.この後で"ErrorTextFunction"はストリームから他のエラーが読み込まれるまでNullを返す.この関数の結果は無視される."ErrorTextFunction"を提供するストリームメソッドが"ClearErrorFunction"定義もまた提供することが推奨される.
  • "OptionChangesFunction"Options[st,Method]によって返されたリストからのストリーム st のオプションの編集に使われる.例えば,ストリームメソッドがパスワードやその他のセンシティブなセキュリティデータを含むオプションを取ることがある.デフォルトで,Optionsはその設定を返す.この関数はそのオプションフィールドを削除する方法を提供する.
  • 次は,オプションを変更する関数である.
  • 名前パラメータ戻り値
    "OptionChangesFunction"{state,options}{newoptions,newstate}

例題

すべて開くすべて閉じる

  (1)

メソッドオプション"Bytes"として渡されたバイトリストから入力を取るストリームメソッドを定義する:

任意の場所からのバイトリストにストリームを開く:

ストリームから読み込む:

ストリームを閉じる:

スコープ  (1)

シークメソッドを定義しないストリームメソッドであっても使うことはできるが,ある種の操作をサポートするためにカーネルの使用メモリが多くなる.次は増大するバッファを埋めるために連続する読込みコールでより多くのバイトが読み込まれることを示している:

"SeekableQFunction""StreamSize""SeekFunction"にサポートを加えることで,読み込みバッファが同じ長さに留まる:

おもしろい例題  (1)

zipアーカイブ内のファイルへのストリームを開く入力ストリームメソッドを定義する:

jarファイル内のテキストファイルへのストリームを開く:

そこから行を読む:

ストリームを閉じ,リソースを解放する:

Wolfram Research (2012), DefineInputStreamMethod, Wolfram言語関数, https://reference.wolfram.com/language/ref/DefineInputStreamMethod.html.

テキスト

Wolfram Research (2012), DefineInputStreamMethod, Wolfram言語関数, https://reference.wolfram.com/language/ref/DefineInputStreamMethod.html.

CMS

Wolfram Language. 2012. "DefineInputStreamMethod." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/DefineInputStreamMethod.html.

APA

Wolfram Language. (2012). DefineInputStreamMethod. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/DefineInputStreamMethod.html

BibTeX

@misc{reference.wolfram_2024_defineinputstreammethod, author="Wolfram Research", title="{DefineInputStreamMethod}", year="2012", howpublished="\url{https://reference.wolfram.com/language/ref/DefineInputStreamMethod.html}", note=[Accessed: 18-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_defineinputstreammethod, organization={Wolfram Research}, title={DefineInputStreamMethod}, year={2012}, url={https://reference.wolfram.com/language/ref/DefineInputStreamMethod.html}, note=[Accessed: 18-November-2024 ]}