Как читать или писать в scoketConnection? (Newb ie) - PullRequest
0 голосов
/ 14 апреля 2020

Я никогда раньше не использовал C ++, поэтому это может быть глупый вопрос.

В RI использовать эту функцию для чтения из сокета:

socket_bin_reader <- function(in_sock) {
  string_read <- raw(0)
  while((rd <- readBin(in_sock, what = "raw", n=1)) > 0) {
    if (rd == 0xff) rd <- readBin(in_sock, what = "raw", n =1)
    string_read <- c(string_read, rd)
  }
  return(string_read)
}

Эта функция делает именно то, что мне нужно , но имеет недостаток в том, что для чтения больших объемов данных требуется много времени. Поэтому я ищу способы использования C ++.

Я нашел этот пример о том, как читать побайтово из файла (cpp -byte-file-read ) Тело из моей функции, вероятно, будет основано на этом пример. Я предполагаю, что это будет выглядеть так:

// [[Rcpp::export]]
NumericVector socket_bin_reader_C(??? in_sock) {
  NumericVector out = NumericVector::create(??);
  ifstream infile(in_sock, ios::in | ios::binary);
  while (rd = infile.read(char*) > 0) {
    if (rd == 0xff) rd = infile.read(char*);
    add rd to out;
  }
}

Но у меня есть два вопроса:

  1. В R cpp вы должны предоставить класс для каждого параметра. Что такое класс для socketConnection?
  2. Я знаю, что в C или C ++ вам нужно выделять память. Как я могу динамически перераспределить больше памяти для вектора возврата?

Бен

...