6.5 二进制连接

Keywords:

Previous: Listing and manipulating connections,Up: Connections

6.5 二进制连接

函数 readBinwriteBin 可以读写二进制连接。二进制模式打开的连接可以通过添加 "b" 的方式设置读写规范,即用 "rb" 表示读,"wb""ab"(如果可以的话)表示写。这些函数拥有的参数如下

     readBin(con, what, n = 1, size = NA, endian = .Platform$endian)

     writeBin(object, con, size = NA, endian = .Platform$endian)

在两种情况下,con 是一个在函数调用过程中因需要而打开的连接,如果给定的是字符串,它会被假定是文件名字。

描述输出略微简单一点,因此我们首先描述它。object 必须是一个原子型向量对象,也就是没有属性的numericintegerlogicalcharactercomplexraw 模式的向量。默认情况下,这些以和内存里面完全一样字节流的写入文件的。

readBin 从文件中读入字节流,把它们解释为 what 给定模式的向量。这既可以是一个适当模式(比如,what=integer())的对象,也可以是字符串所描述的模式(前面章节给出的五种模式中的一种,或"double""int")的对象。参数 n 指定从连接中读入向量元素的最大数目:如果可以获得的元素比较少,会返回一个短的向量。参数signed允许单字节和双字节整数作为有符号(默认)或无符号整数读入。

剩下的两个参数用于和其它程序或平台交换数据而读写数据。默认情况下,二进制数据直接从内存传给连接,反之亦然。在不同体系架构的机器间传输文件时,这两个参数是不够的,但是,几乎所有的R平台之间仅仅需要改变字节序(byte-order)。普通PC(基于ix86x86_64 的机器),Compaq Alpha和Vaxen 是小字节序(little-endian)的,Sun Sparc,mc680x0 系列,IBMR6000, Apple Macintosh, SGI 和许多其它电脑都是 大字节序(big-endian)的。(网络字节序(如XDR1)是大字节序的。)转换来自其它程序的数据,我们可能需要做更多的事情,比如,读16位的整数或写单精度的实数。这可以通过 size 参数来做。这个参数(通常)允许整数和逻辑值的存储大小为1,2,4,8,允许实数存储大小为4,8和12或16(可能的话)。在不同存储大小之间转换可能会丢失很多精度,并且不能用于含 NA 的向量。

字符串以C格式读写,这是一个以零字节结束的字节流。函数 readCharwriteChar 提供了更大的灵活性。


Footnotes

[1] 译者注:就是eXternal Data Representation,外部数据描述标准

Hits:Loading...

special topic