バイナリファイル

ReadWriteのような関数は普通の印刷可能なテキストを取り扱う.しかし,外部のデータファイルやデバイスを扱うには,さらに下がったレベルで実際のバイナリデータに対して直接作業する必要があることもある.これにはBinaryReadBinaryWriteを使うことができる.

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ビットの符号なしの整数

BinaryReadBinaryWriteでサポートされている型

一連のバイトをファイルに書き出す.
In[1]:=
Click for copyable input
Out[1]=
BinaryWriteは自動的にファイルストリームを開く.これで閉じる.
In[2]:=
Click for copyable input
ファイルの最初のバイトを読み,整数として返す.
In[3]:=
Click for copyable input
Out[3]=
このファイルの次の8ビットを読み,文字として返す.
In[4]:=
Click for copyable input
Out[4]=
次の32ビットを32ビット整数として読み込む.
In[5]:=
Click for copyable input
Out[5]=

ReadWriteのようにBinaryReadBinaryWriteはストリームを取り扱う.しかし,ファイル名を指定した場合は,指定されたファイルを自動的にストリームのように開く.直接ストリームを作成する場合はOpenReadまたはOpenWriteを使うことができる.コンピュータシステムによっては,BinaryReadBinaryWriteでストリームを使うには,オプションの設定,BinaryFormat->Trueが改行の解釈の問題等からデータが壊れることを防ぐために必要である.

Wolfram言語の使用には,通常コンピュータ内部でデータがどのように格納されているか考える必要はない.BinaryReadBinaryWriteはこの例外であり,微妙な問題として注意しておきたいのは,コンピュータによって数を表すバイトが$ByteOrderingの設定として指定されているのと違う階級のものを使うことがあることである.

32ビット整数をファイルに書き出す.
In[6]:=
Click for copyable input
Out[6]=
これでファイルを閉じる.
In[7]:=
Click for copyable input
これにより整数を読み直すが,バイトの順序を逆にする.
In[8]:=
Click for copyable input
Out[8]=
BinaryReadList["file"]ファイルにあるすべてのバイトを読み込む
BinaryReadList["file",type]すべてのデータをある型のオブジェクトとして読み込む
BinaryReadList["file",{type1,type2,}]データを一連の型のオブジェクトとして扱う
BinaryReadList["file",types,n]最初の n 個のオブジェクトだけを読み込む

バイナリファイル全体の読込み

128ビット実数を書き出す.
In[9]:=
Click for copyable input
Out[9]=
数のバイトを読み込み直す.
In[10]:=
Click for copyable input
Out[10]=
一連の32ビット実数としてバイトを読み込み直す.
In[11]:=
Click for copyable input
Out[11]=
データをバイトと32ビット実数を含んだペアとして扱う.
In[12]:=
Click for copyable input
Out[12]=

BinaryReadBinaryWriteでは,生のバイナリデータの読込みと書出しは完全にフレキシブルに行うことができる.しかし実際の作業ではひとつのすでに決められた型を使って作業することがより望まれる.ImportExportではこれが可能である.

多くの複雑な型に加えてImportExportBinaryReadBinaryWriteが扱うのと同じ型の一連の同一データ要素を含んだファイルをサポートしている.また,これらの関数はで表される個々のバイナリビットを含んだ形式をサポートしている.