二进制文件

函数如 ReadWrite 处理普通可打印文本. 但是,在处理外部数据文件或者设备时,有时需要在较低层直接对原始二进制数据进行工作. 要做到这一点,可以使用 BinaryReadBinaryWrite.

BinaryRead[stream]读入一个字节
BinaryRead[stream,type]读入一个指定类型的对象
BinaryRead[stream,{type1,type2,}]读入一个对象列表
BinaryWrite[stream,b]写入一个字节
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"IEEE 四精度复数
"Integer8"8位符号整数
"Integer16"16位符号整数
"Integer32"32位符号整数
"Integer64"64位符号整数
"Integer128"128位符号整数
"Real32"IEEE 単精度实数
"Real64"IEEE 双精度实数
"Real128"IEEE 四精度实数
"TerminatedString"由8位字符组成的以null结束的字符串
"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 适用于流. 但是如果给出一个文件名,它们会自动把指定文件作为一个流打开. 使用 OpenReadOpenWrite 可以直接创建一个流. 在一些计算机系统上,为了使任意流都可以用于 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 实现.

除了许多复杂的格式,ImportExport 支持包含同样数据格式的序列,它具有 BinaryReadBinaryWrite 中同样的类型. 它们也支持 格式,包括由 表示的单个二进制位.