src/main/resources
и src/test/resources
. Пример структуры папок:
testing_styles/
├── build.sbt
├── src
│ └── main
│ ├── resources
│ │ └── readme.txt
Для чтения ресурсов объект Source предоставляет метод fromResource.
import scala.io.Source
val readmeText : Iterator[String] = Source.fromResource("readme.txt").getLines
Для чтения ресурсов вы можете использовать getClass.getResource и getClass.getResourceAsStream.
val stream : InputStream = getClass.getResourceAsStream("/readme.txt")
val lines = scala.io.Source.fromInputStream( stream ).getLines
Имейте в виду, что getResourceAsStream также отлично работает, когда ресурсы являются частью jar, getResource, который возвращает URL-адрес, который часто используется для создания файла, может привести к проблемам там.
Чтобы избежать несанкционированных Java NPE (Java настолько ужасен), рассмотрите:
import scala.io.Source
import scala.util.Try
def niceFeedbackReadResource(resource: String): List[String] =
Try(Source.fromResource(resource).getLines.toList)
.recover(throw new FileNotFoundException(resource))
Чтобы получить значимые FNFE вместо этого.
Для производственного кода я также предлагаю убедиться, что источник снова закрыт.
Какой язык Вы используете? Общепринятая методика должна сделать некоторую двоичную сериализацию вида.
хорошо, я вижу, что Вы редактируете для добавления языка. Для C++ там несколько опций. Я полагаю, что механизм сериализации Повышения довольно хорош. Кроме того, страница для библиотеки сериализации Повышения также описывает альтернативы. Вот ссылка:
http://www.boost.org/doc/libs/1_37_0/libs/serialization/doc/index.html
Принятие C/C++: Используйте индексы массива и структуры фиксированного размера вместо выделений переменной длины и указателей. Необходимо смочь непосредственно записать () структуры данных в файл для более позднего чтения () луг.
Для чего-либо высокоуровневого: Много более высоких API языка имеет средства сериализации. Java и QT/C++ оба имеют методы, которые бегут сразу для возражения, таким образом, я знаю, что другие делают также.
Вы могли просто записать всю структуру данных непосредственно в диск при помощи сериализации (например, в Java). Однако Вы могли бы быть вынуждены считать весь объект назад в память для доступа к ее элементам. Если это не практично, то Вы могли рассмотреть использование произвольный доступ файл для хранения элементов хеш-таблицы. Вместо того, чтобы использовать указатель для представления следующего элемента в цепочке Вы просто использовали бы положение байта в файле.
Это немного подобно построению дискового DAWG, который я действительно некоторое время поддерживал. Что сделало, это столь очень сладкое было то, что это могло быть загружено непосредственно с mmap, вместо этого читая файл. Если пространство хеша управляемо, скажите 2 <глоток> 16 глоток> или 2 <глоток> 24 глоток> записи, то я думаю, что сделал бы что-то вроде этого:
Это должно позволить Вам mmap и использовать таблицу непосредственно без модификации. (страшный быстрый, если в кэше ОС!), но необходимо работать с индексами вместо указателей. Это является довольно жутким для имения мегабайтов в наличии в syscall-round-trip-time, и все еще иметь его поднимают меньше, чем это в физической памяти, из-за подкачки страниц.
Если Ваша реализация хеш-таблицы хорошо работает, то просто хранят хеш и данные каждого объекта - помещение объекта в таблицу не должно быть дорогим, учитывая хеш, и не сериализация таблицы или цепочки непосредственно позволяет Вам варьироваться точная реализация между сохранением и загрузкой.