readBin
位于 base
包(package)。 说明
从连接或原始向量读取二进制数据或将二进制数据写入连接或原始向量。
用法
readBin(con, what, n = 1L, size = NA_integer_, signed = TRUE,
endian = .Platform$endian)
writeBin(object, con, size = NA_integer_,
endian = .Platform$endian, useBytes = FALSE)
参数
con |
connection 对象或命名文件或原始向量的字符串。 |
what |
其模式将给出要读取的向量的模式的对象,或者说明模式的长度为 1 的字符向量: |
n |
数字。要读取的(最大)记录数。您可以在此处使用over-estimate,但不能太大,因为存储空间是为 |
size |
整数。字节流中每个元素的字节数。默认值 |
signed |
合乎逻辑的。仅当确定文件中的数量应被视为有符号整数或无符号整数时,才用于大小为 1 和 2 的整数。 |
endian |
文件的目标系统的endian-ness( |
object |
一个R要写入连接的对象。 |
useBytes |
请参阅 |
细节
这些函数只能与binary-mode 连接一起使用。如果con
是字符串,则函数调用file
来获取在函数调用期间打开的binary-mode 文件连接。
如果连接打开,则从当前位置读取/写入。如果未打开,则在调用期间以适当的模式(二进制读或写)打开它,然后再次关闭。打开的连接必须处于二进制模式。
如果使用 con
原始向量调用 readBin
,则向量中的数据将用作输入。如果使用 con
原始向量调用 writeBin
,则仅指示应返回原始向量。
如果指定了size
,而不是对象的自然大小,则向量的每个元素在写入或读取之前都会被强制为适当的类型。对于整数或逻辑向量,可能的大小为 1、2、4 和可能为 8;对于数值向量,可能的大小为 4、8 和可能为 12/16。 (请注意,强制转换作为有符号类型发生,除非在读取大小为 1 和 2 的整数时 signed = FALSE
。)更改大小不太可能保留 NA
,并且扩展精度大小不太可能跨平台移植。
readBin
和writeBin
读写C 风格的zero-terminated 字符串。输入字符串限制为 10000 个字符。 readChar
和writeChar
可用于读写固定长度字符串。不检查该字符串在当前区域设置的编码中是否有效。
处理R缺失且特殊(Inf
,-Inf
和NaN
)值在“R 数据导入/导出”手册中讨论。
一次调用中只能写入 字节(这是 32 位平台上原始向量的最大容量)。
‘Endian-ness’ 与 size > 1
相关,并且应始终为可移植代码设置(默认值仅适用于在同一平台上写入和读取文件时)。
值
对于 readBin
,具有适当模式和长度的向量读取的项目数(可能小于 n
)。
对于 writeBin
,原始向量(如果 con
是原始向量)或不可见的 NULL
。
注意
如果 C 类型 long
的大小为 8 字节或 C 类型 long long
存在且大小为 8 字节,则大小为 8 的整数读/写将可用。
仅当该类型可用且与 double
不同时,才可以进行 sizeof(long double)
大小(通常为 12 或 16 字节)的实际读/写。
如果 readBin(what = character())
在不包含 C 风格字符串的文件上错误使用,则会给出警告(通常是很多)。从文件或连接中,输入将被分成长度为 10000 的片段,并丢弃任何最终部分。
例子
zzfil <- tempfile("testbin")
zz <- file(zzfil, "wb")
writeBin(1:10, zz)
writeBin(pi, zz, endian = "swap")
writeBin(pi, zz, size = 4)
writeBin(pi^2, zz, size = 4, endian = "swap")
writeBin(pi+3i, zz)
writeBin("A test of a connection", zz)
z <- paste("A very long string", 1:100, collapse = " + ")
writeBin(z, zz)
if(.Machine$sizeof.long == 8 || .Machine$sizeof.longlong == 8)
writeBin(as.integer(5^(1:10)), zz, size = 8)
if((s <- .Machine$sizeof.longdouble) > 8)
writeBin((pi/3)^(1:10), zz, size = s)
close(zz)
zz <- file(zzfil, "rb")
readBin(zz, integer(), 4)
readBin(zz, integer(), 6)
readBin(zz, numeric(), 1, endian = "swap")
readBin(zz, numeric(), size = 4)
readBin(zz, numeric(), size = 4, endian = "swap")
readBin(zz, complex(), 1)
readBin(zz, character(), 1)
z2 <- readBin(zz, character(), 1)
if(.Machine$sizeof.long == 8 || .Machine$sizeof.longlong == 8)
readBin(zz, integer(), 10, size = 8)
if((s <- .Machine$sizeof.longdouble) > 8)
readBin(zz, numeric(), 10, size = s)
close(zz)
unlink(zzfil)
stopifnot(z2 == z)
## signed vs unsigned ints
zzfil <- tempfile("testbin")
zz <- file(zzfil, "wb")
x <- as.integer(seq(0, 255, 32))
writeBin(x, zz, size = 1)
writeBin(x, zz, size = 1)
x <- as.integer(seq(0, 60000, 10000))
writeBin(x, zz, size = 2)
writeBin(x, zz, size = 2)
close(zz)
zz <- file(zzfil, "rb")
readBin(zz, integer(), 8, size = 1)
readBin(zz, integer(), 8, size = 1, signed = FALSE)
readBin(zz, integer(), 7, size = 2)
readBin(zz, integer(), 7, size = 2, signed = FALSE)
close(zz)
unlink(zzfil)
## use of raw
z <- writeBin(pi^{1:5}, raw(), size = 4)
readBin(z, numeric(), 5, size = 4)
z <- writeBin(c("a", "test", "of", "character"), raw())
readBin(z, character(), 4)
也可以看看
“R 数据导入/导出”手册。
readChar
读取/写入固定长度字符串。
connections
、readLines
、writeLines
。
.Machine
的大小为 long
、 long long
和 long double
。
相关用法
- R readRenviron 从文件设置环境变量
- R readChar 与连接之间传输字符串
- R readRDS 单个对象的序列化接口
- R readline 从终端读取一行
- R readLines 从连接读取文本行
- R remove 从指定环境中删除对象
- R rep 复制向量和列表的元素
- R reg.finalizer 对象的最终确定
- R rev 反转元素
- R regmatches 提取或替换匹配的子字符串
- R replace 替换向量中的值
- R rank 样本排名
- R rapply 递归地将函数应用于列表
- R raw 原始向量
- R rawConnection 原始连接
- R row 行索引
- R row.names 获取和设置 DataFrame 的行名称
- R rowsum 根据分组变量给出矩阵或 DataFrame 的列和
- R range 值范围
- R rle 游程长度编码
- R round.POSIXt 舍入/截断日期时间对象
- R rawConversion 与(位/打包)原始向量之间的转换
- R file.path 构造文件路径
- R grep 模式匹配和替换
- R getwd 获取或设置工作目录
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Transfer Binary Data To and From Connections。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。