二进制文件
函数如 Read 和 Write 处理普通可打印文本. 但是,在处理外部数据文件或者设备时,有时需要在较低层直接对原始二进制数据进行工作. 要做到这一点,可以使用 BinaryRead 和 BinaryWrite.
| 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位无符号整数 |
BinaryRead 和 BinaryWrite 中支持的类型.
| Out[1]= |  |
| Out[3]= |  |
| 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 中同样的类型. 它们也支持
格式,包括由
或
表示的单个二进制位.