如何在R中读取整个二进制blob?

时间:2016-12-13 14:41:39

标签: r

我试图读取二进制文件的全部内容。类似于以下Python代码:

with open("Male_Moose.jpg") as f:
  data = f.read()

  print "Length of file: ", len(data)

这是我的R代码:

main <- function()
{
  fname <- "Male_Moose.jpg"
  contents <- readBin(fname, file.info(fname)$size)

  cat(paste("File size:     ", nchar(contents, type = "bytes")))
  cat("\n\n")
  cat(paste("File info size:", file.info(fname)$size))
  cat("\n\n")
}

main()

JPG文件大约是1.2兆字节。 Python代码正确地将文件作为blob读入,我可以在内存中找到它的长度。 R不会以同样的方式做事。这是为什么?

[编辑]

R脚本的输出:

File size:      20

File info size: 1261900

2 个答案:

答案 0 :(得分:6)

您遗漏了readBin的第二个参数,这是您要阅读的数据的类型

readBin(con, what, n = 1L, size = NA_integer_, signed = TRUE,
        endian = .Platform$endian)

指定为"raw"的内容,它将数据作为原始字节的向量读取:

contents <- readBin(fname, "raw", file.info(fname)$size)
length(contents)  # not nchar()

答案 1 :(得分:2)

您可能会发现使用jpeg包更容易。

library(jpeg)
MooseImage = readJPEG("Male_Moose.jpg")

然后如果你只想要一个blob

MooseBlob = as.vector(MooseImage)