R WriteBin размер управляющей строки - PullRequest
0 голосов
/ 07 апреля 2020

Я хотел бы записать / прочитать таблицу данных ниже в / из двоичного файла.

tb = data.table(KEY=c("k1","key2"),VAL=c(1,10))

Поскольку длина полей не фиксирована, я хотел бы указать size = 20 к КЛЮЧУ и размер = 8 к ВАЛ.

fn = "C:/test.dat"
ff <- file(fn,"wb") 
for (i in 1:nrow(tb)){
  rec = tb[i,] 
  writeBin(as.character(rec$KEY), ff, size=20, endian="little")
  writeBin(as.numeric(rec$VAL),   ff, size=8,  endian="little") 
}
close(ff)

Я ожидал, что размер файла станет (20 + 8) * 2 = 56, но это 3 + 8 + 5 + 8 = 24.

ff <- file(fn,"rb") 
s <- file.info(fn)$size

1) Прежде всего, я не уверен, почему значения KEY занимают 3 и 5 байтов вместо их фактического размера 2 и 4.

2) Но, что более важно почему они не последовали за размером, который я там положил? И как мы можем принудительно установить фиксированный размер (скажем, 20) в поле KEY, чтобы мы могли читать двоичный файл в предопределенном формате? Мой план состоит в том, чтобы прочитать двоичный файл в последовательности 20 и 8 байтов, чтобы восстановить таблицу.

...