Как считать содержание файла в istringstream?

Если вы делаете «df.count> 0». Он учитывает количество всех разделов для всех исполнителей и добавляет их в Driver. Это займет некоторое время, когда вы имеете дело с миллионами строк.

Лучший способ сделать это - выполнить «df.take (1)» и проверить, является ли его нулевым. Это вернет «java.util.NoSuchElementException», поэтому лучше попробовать «df.take (1)».

. Dataframe возвращает ошибку, когда take (1) выполняется вместо пустой строки , Я выделил конкретные строки кода, где он выдает ошибку.

36
задан Marcos Bento 25 September 2008 в 20:42
поделиться

4 ответа

std::ifstream имеет метод rdbuf(), который возвращает указатель на filebuf. Можно тогда "продвинуть" это filebuf в Ваш stringstream:

#include <fstream>
#include <sstream>

int main()
{
    std::ifstream file( "myFile" );

    if ( file )
    {
        std::stringstream buffer;

        buffer << file.rdbuf();

        file.close();

        // operations on the buffer...
    }
}

РЕДАКТИРОВАНИЕ: Как Martin York отмечает в комментариях, это не могло бы быть быстрым решением, так как stringstream operator<< считает filebuf символ символом. Вы могли бы хотеть проверить его ответ, где он использует ifstream read метод, как Вы раньше делали, и затем устанавливали эти stringstream буфер для указания на ранее выделенную память.

41
ответ дан Guillaume Jacquenot 23 September 2019 в 22:12
поделиться

Другая вещь иметь в виду состоит в том, что файловый ввод-вывод всегда будет самой медленной операцией. Решение Luc Touraille корректно, но существуют другие опции. Чтение всего файла в память сразу будет намного быстрее, чем отдельные чтения.

0
ответ дан luke 23 September 2019 в 22:12
поделиться

Это походит на преждевременную оптимизацию мне. Сколько работы делается в обработке. При принятии modernish рабочего стола/сервера, и не встроенной системы, копировании некоторых МБ данных во время инициализации является довольно дешевым, особенно по сравнению с прочитыванием файла диска во-первых. Я придерживался бы с тем, что Вы имеете, измеряете систему, когда это завершено, и решение, если потенциальное увеличение производительности стоило бы того. Конечно, если память трудна, это находится во внутреннем цикле или программе, которую часто называют (как однажды секунда), который изменяет баланс.

1
ответ дан KeithB 23 September 2019 в 22:12
поделиться

Хорошо. Я не говорю, что это будет более быстро, чем чтение из файла

, Но это - метод, где Вы создаете буфер однажды и после того, как данные считаны в буферное использование это непосредственно как источник для stringstream.

N.B. стоит упомянуть что станд.:: ifstream буферизуется. Это считывает данные из файла в (относительно больших) блоках. Операции с потоками выполняются против буфера, только возвращающегося к файлу для другого чтения, когда больше данных необходимо. Таким образом, прежде, чем высосать все данные в память проверьте, что это - горлышко бутылки.

#include <fstream>
#include <sstream>
#include <vector>

int main()
{
    std::ifstream       file("Plop");
    if (file)
    {
        /*
         * Get the size of the file
         */
        file.seekg(0,std::ios::end);
        std::streampos          length = file.tellg();
        file.seekg(0,std::ios::beg);

        /*
         * Use a vector as the buffer.
         * It is exception safe and will be tidied up correctly.
         * This constructor creates a buffer of the correct length.
         *
         * Then read the whole file into the buffer.
         */
        std::vector<char>       buffer(length);
        file.read(&buffer[0],length);

        /*
         * Create your string stream.
         * Get the stringbuffer from the stream and set the vector as it source.
         */
        std::stringstream       localStream;
        localStream.rdbuf()->pubsetbuf(&buffer[0],length);

        /*
         * Note the buffer is NOT copied, if it goes out of scope
         * the stream will be reading from released memory.
         */
    }
}
41
ответ дан Martin York 23 September 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: