Я никогда раньше не использовал 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;
}
}
Но у меня есть два вопроса:
- В R cpp вы должны предоставить класс для каждого параметра. Что такое класс для socketConnection?
- Я знаю, что в C или C ++ вам нужно выделять память. Как я могу динамически перераспределить больше памяти для вектора возврата?
Бен