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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。