バイナリファイル
ReadやWriteのような関数は普通の印刷可能なテキストを取り扱う.しかし,外部のデータファイルやデバイスを扱うには,さらに下がったレベルで実際のバイナリデータに対して直接作業する必要があることもある.これにはBinaryReadとBinaryWriteを使うことができる.
| BinaryRead[stream] | 1バイトを読む |
| BinaryRead[stream,type] | 指定の型のオブジェクトを読む |
| BinaryRead[stream,{type1,type2,...}] | オブジェクトのリストを読む |
| BinaryWrite[stream,b] | 1バイトを書き出す |
| BinaryWrite[stream,{b1,b2,...}] | 一連のバイトを書き出す |
| BinaryWrite[stream,"string"] | 文字列中の文字を書き出す |
| BinaryWrite[stream,x,type] | 指定された型のオブジェクトを書き出す |
| BinaryWrite[stream,{x1,x2,...},type] | 一連のオブジェクトを書き出す |
| BinaryWrite[stream,{x1,x2,...},{type1,type2,...}] |
| 異なる型のオブジェクトを書き出す |
バイナリデータの読込みと書出し
| "Byte" | 8ビットの符号なしの整数 |
| "Character8" | 8ビットの文字 |
| "Character16" | 16ビットの文字 |
| "Complex64" | IEEE単精度複素数 |
| "Complex128" | IEEE倍精度複素数 |
| "Complex256" | IEEE4倍精度複素数 |
| "Integer8" | 8ビット符号付き整数 |
| "Integer16" | 16ビット符号付き整数 |
| "Integer32" | 32ビット符号付き整数 |
| "Integer64" | 64ビット符号付き整数 |
| "Integer128" | 128ビット符号付き整数 |
| "Real32" | IEEE単精度実数 |
| "Real64" | IEEE倍精度実数 |
| "Real128" | IEEE4倍精度実数 |
| "TerminatedString" | 8ビット文字のヌルで終る文字列 |
| "UnsignedInteger8" | 8ビットの符号なしの整数 |
| "UnsignedInteger16" | 16ビットの符号なしの整数 |
| "UnsignedInteger32" | 32ビットの符号なしの整数 |
| "UnsignedInteger64" | 64ビットの符号なしの整数 |
| "UnsignedInteger128" | 128ビットの符号なしの整数 |
BinaryReadとBinaryWriteでサポートされている型
| Out[1]= |  |
| Out[3]= |  |
このファイルの次の8ビットを読み,文字として返す.
| Out[4]= |  |
| Out[5]= |  |
ReadやWriteのようにBinaryReadとBinaryWriteはストリームを取り扱う.しかし,ファイル名を指定した場合は,指定されたファイルを自動的にストリームのように開く.直接ストリームを作成する場合はOpenReadまたはOpenWriteを使うことができる.コンピュータシステムによっては,BinaryRead,BinaryWriteでストリームを使うには,オプションの設定,BinaryFormat->Trueが改行の解釈の問題等からデータが壊れることを防ぐために必要である.
Mathematica の使用には,通常コンピュータ内部でデータがどのように格納されているか考える必要はない.BinaryReadとBinaryWriteはこの例外であり,微妙な問題として注意しておきたいのは,コンピュータによって数を表すバイトが$ByteOrderingの設定として指定されているのと違う階級のものを使うことがあることである.
| Out[6]= |  |
これにより整数を読み直すが,バイトの順序を逆にする.
| Out[8]= |  |
バイナリファイル全体の読込み
| Out[9]= |  |
| Out[10]= |  |
| Out[11]= |  |
データをバイトと32ビット実数を含んだペアとして扱う.
| Out[12]= |  |
BinaryReadとBinaryWriteでは,生のバイナリデータの読込みと書出しは完全にフレキシブルに行うことができる.しかし実際の作業ではひとつのすでに決められた型を使って作業することがより望まれる.ImportとExportではこれが可能である.
多くの複雑な型に加えてImportとExportはBinaryReadとBinaryWriteが扱うのと同じ型の一連の同一データ要素を含んだファイルをサポートしている.また,これらの関数は
,
で表される個々のバイナリビットを含んだ
形式をサポートしている.