當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R readBin 與連接之間傳輸二進製數據


R語言 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 的字符向量: "numeric" , "double" , "integer" , "int" , "logical" , "complex" , "character" , "raw" 之一。

n

數字。要讀取的(最大)記錄數。您可以在此處使用over-estimate,但不能太大,因為存儲空間是為n 項目保留的。

size

整數。字節流中每個元素的字節數。默認值 NA_integer_ 使用自然大小。原始向量和複雜向量不支持大小更改。

signed

合乎邏輯的。僅當確定文件中的數量應被視為有符號整數或無符號整數時,才用於大小為 1 和 2 的整數。

endian

文件的目標係統的endian-ness("big""little")。使用"swap"將強製交換endian-ness。

object

一個R要寫入連接的對象。

useBytes

請參閱writeLines

細節

這些函數隻能與binary-mode 連接一起使用。如果con 是字符串,則函數調用file 來獲取在函數調用期間打開的binary-mode 文件連接。

如果連接打開,則從當前位置讀取/寫入。如果未打開,則在調用期間以適當的模式(二進製讀或寫)打開它,然後再次關閉。打開的連接必須處於二進製模式。

如果使用 con 原始向量調用 readBin,則向量中的數據將用作輸入。如果使用 con 原始向量調用 writeBin,則僅指示應返回原始向量。

如果指定了size,而不是對象的自然大小,則向量的每個元素在寫入或讀取之前都會被強製為適當的類型。對於整數或邏輯向量,可能的大小為 1、2、4 和可能為 8;對於數值向量,可能的大小為 4、8 和可能為 12/16。 (請注意,強製轉換作為有符號類型發生,除非在讀取大小為 1 和 2 的整數時 signed = FALSE。)更改大小不太可能保留 NA ,並且擴展精度大小不太可能跨平台移植。

readBinwriteBin 讀寫C 風格的zero-terminated 字符串。輸入字符串限製為 10000 個字符。 readCharwriteChar可用於讀寫固定長度字符串。不檢查該字符串在當前區域設置的編碼中是否有效。

處理R缺失且特殊(Inf,-InfNaN)值在“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 讀取/寫入固定長度字符串。

connectionsreadLineswriteLines

.Machine 的大小為 longlong longlong double

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Transfer Binary Data To and From Connections。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。