Здравствуете, столкнулся с вопросом доступа к произвольной строки в файле. Если я хочу вывести например 67000 строку ... Но не хочу бежать 1, 2, 3,..., 66999,и наконец 67000. Как можно сделать это быстрее? Например как с массивом? arr[67000]? Слышал o RandomAccessFile, но суть не понял.
Дмитрий, если вы не собираетесь менять файл и он у вас работает в роли БД, то для скорости работы 1 раз считайте файл в лист (или в мап, если вам нужна определенная буква) и им пользуйтесь.
Радо каждого слова читать файл от начала и до конца - будет очень долго (в сравнении с коллекцией). А если взять не модифицируемую коллекцию, то ещё немного в скорости выиграете (совсем чуть-чуть).
Но по каждому слову бегать по всему файлу (в 67к строк) это не то, что нужно
Файл - это плоские данные, где там находятся начала строк, да и вообще, есть ли там строки текста, картинки или музыка - это неизвестно. В файле может быть все что угодно, и вероятно даже без хлеба.
Чтобы получить доступ к конкретной строке, сразу без регистрации и смс, нужно где-то и как-то узнать позицию файла, где эта строка начинается. К примеру, прочитать все строки в файле, записывая в другой файлик места, откуда эта строка начинается, а когда надо будет прочитать нужную строчку - мы читаем весь этот маленький файлик со смещениями, открываем большой файл, через RandomAccessFile переходим к нужному месте и оттуда читаем. Фактически, мы таким образом изобрели индексы, а процесс создания таких вспомогательных файликов называется индексированием.
Задача со словарем может быть решена еще проще: зная размер файла, и предварительно отсортировав слова в файле в алфавитном порядке (на самом деле в порядке кодировки, но это тонкости), можно методом половинного деления, искать позицию слова в файле приблизительно, постепенно подбираясь к нужному. Свой словарь я так и делал, разве что seek делал на 200 символов раньше, а потом читал одну строчку и отбрасывал ее, таким образом я находил начало строки. Все собираюсь победить к нем эксепшены и выложить, да времени не найду - может допишите за меня?
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Моя основная задача заключается в том чтобы, научить Unity читать значения из SharedPreference, я пробовал следовать этой инструкции, но ничего не работает,...
Имеются две таблицы Departments и EmployeesПри выборе строки в Departments происходит переход по employeesID в таблицу Employees