data{std::istreambuf_iterator<char>(target), std::istreambuf_iterator<char>()};
или
std::stringstream ss;
ss << target.rdbuf();
auto a = ss.str();
1) map using system API 2) read as bytes
Про mmap не надо
второе не понял
Тогда второй из твоих. Хотя оба медленные
Смапил->считал как байты P.S. Еще можно fread, но стримы с sync_with_stdio(false) вроде не так уже и плохи
первый точно медленный
Самый быстрый? std::string readall(std::ifstream& f) { f.seekg(0, std::ios::end); auto sz = f.tellg(); f.seekg(0, std::ios::beg); std::string result(sz, 0); f.read(result.data(), sz); return result; }
Ага, уже так сделал, но без утечки переменных и result.resize(sz);
Интересно, а что такое утечка переменной?
Может я не так её назвал std::string data; { std::ifstream ifs(path, std::ifstream::binary); ifs.seekg(0, std::ios::end); ssize_t data_size = ifs.tellg(); if (data_size == -1) { return FR_INT_ERR; } data.resize(data_size); ifs.read(data.data(), data_size); }
На каст к ssize_t компилятор не ругается?
Обсуждают сегодня