将对int-double写入磁盘二进制文件的快速方法

时间:2020-04-07 07:59:27

标签: rcpp ofstream

我尝试过的事情:

#include <Rcpp.h>
#include <fstream>

using namespace Rcpp;
using namespace std;

// [[Rcpp::export]]
void write_indval(const char * filename,
                  const IntegerVector& i,
                  const NumericVector& x) {

  ofstream myFile(filename, ios::out | ios::binary);

  const int * pI = i.begin();
  const double * pX = x.begin();
  int K = i.size();

  for (int k = 0; k < K; k++, pI++, pX++) {
    myFile.write(reinterpret_cast<const char*>(pI), 4);
    myFile.write(reinterpret_cast<const char*>(pX), 8);
  }

  myFile.close();
}

如果我在R中尝试过

N <- 1e8
i <- sample(1000, N, replace = TRUE)
x <- runif(N)
system.time(
  write_indval("test.bin", i, x)
)

写入此1.1 GB数据需要16秒。 写入的数据似乎是我想要的,但我的写入速度为72 MB /秒。 我认为我可以在计算机上以300 MB /秒的速度写入。那么,有人知道此功能有更快的替代方法吗?

0 个答案:

没有答案