如何为独立 java 应用程序存储简单数据
How to store simple data for standalone java application
假设我有一长串具有一些基本特征的人:
马特,27 岁,男性
安妮,49 岁,女
等...
我想为不需要访问互联网的独立桌面应用程序在本地存储此数据。我当前的方法是将名称写入 json 文件,并在程序打开时将它们全部读入 java 中的 Person class;但是,我不认为这是有效的,因为只有在有人执行搜索时才需要访问数据。
所以我考虑了一个简单的 JSONparser,比方说 searchNameInFile("Matt", "data.json") { return person; },但我不知道这是否是存储效率数据的好方法。我很快就考虑了 sqlite,但我只存储了一个 table 数据,我认为这可能有点过头了。什么是存储和搜索本地数据的合适、有效的方法?
我真的认为你应该重新考虑 SQLite。
https://www.tutorialspoint.com/sqlite/sqlite_java.htm
您的数据将存储在本地文件中,可以使用标准 Java SQL 内容轻松查询。它不需要任何服务器软件或互联网连接。
如果您不想使用 SQLite,这里有两种可能的方法,具体取决于您关心的内容。
如果你只关心时间复杂度,但有足够的内存可以使用,你可以将数据存储在一个高效的结构中,例如 HashMap,并使用 Java 内置的 Serializable 来编写将 HashMap 输出到一个文件,并在下次启动时将其读回。
//Where Person is a data class that implements Serializable and contains your desired fields
public void saveData(HashMap<String, Person> people) {
FileOutputStream f = new FileOutputStream(new File("people.txt"));
ObjectOutputStream o = new ObjectOutputStream(f);
o.writeObject(people);
o.close();
f.close();
}
public HashMap<String, Person> loadData() {
FileInputStream fi = new FileInputStream(new File("people.txt"));
ObjectInputStream oi = new ObjectInputStream(fi);
HashMap<String, Person> data = (HashMap<String, Person>) oi.readObject();
oi.close();
fi.close();
return data;
}
如果您不介意 O(n) 次搜索时间,那么您当前的每次搜索都重新读取文件的解决方案就可以了。
it might be overkill
重新发明轮子才是真正的矫枉过正。有很多用于存储和加载数据的库和方法。
既然您想将数据存储在本地文件中,又想在数据中进行搜索,那么嵌入式 SQL 数据库应该是您不错的选择。 SQLite、h2 或 HSQL.
为了访问数据,您可以使用从普通 JDBC 到 Spring Data JPA
的任何东西
你也可以考虑另一个Simple in-memory DB作为H2。它将数据保存在关系数据库中,该数据库作为文件存储在您的计算机中。优点是它具有高检索速度基准。
H2
优点是配置非常简单,只需创建数据库对象并将其配置为使用内存文件即可。
假设我有一长串具有一些基本特征的人:
马特,27 岁,男性
安妮,49 岁,女
等...
我想为不需要访问互联网的独立桌面应用程序在本地存储此数据。我当前的方法是将名称写入 json 文件,并在程序打开时将它们全部读入 java 中的 Person class;但是,我不认为这是有效的,因为只有在有人执行搜索时才需要访问数据。
所以我考虑了一个简单的 JSONparser,比方说 searchNameInFile("Matt", "data.json") { return person; },但我不知道这是否是存储效率数据的好方法。我很快就考虑了 sqlite,但我只存储了一个 table 数据,我认为这可能有点过头了。什么是存储和搜索本地数据的合适、有效的方法?
我真的认为你应该重新考虑 SQLite。
https://www.tutorialspoint.com/sqlite/sqlite_java.htm
您的数据将存储在本地文件中,可以使用标准 Java SQL 内容轻松查询。它不需要任何服务器软件或互联网连接。
如果您不想使用 SQLite,这里有两种可能的方法,具体取决于您关心的内容。
如果你只关心时间复杂度,但有足够的内存可以使用,你可以将数据存储在一个高效的结构中,例如 HashMap,并使用 Java 内置的 Serializable 来编写将 HashMap 输出到一个文件,并在下次启动时将其读回。
//Where Person is a data class that implements Serializable and contains your desired fields
public void saveData(HashMap<String, Person> people) {
FileOutputStream f = new FileOutputStream(new File("people.txt"));
ObjectOutputStream o = new ObjectOutputStream(f);
o.writeObject(people);
o.close();
f.close();
}
public HashMap<String, Person> loadData() {
FileInputStream fi = new FileInputStream(new File("people.txt"));
ObjectInputStream oi = new ObjectInputStream(fi);
HashMap<String, Person> data = (HashMap<String, Person>) oi.readObject();
oi.close();
fi.close();
return data;
}
如果您不介意 O(n) 次搜索时间,那么您当前的每次搜索都重新读取文件的解决方案就可以了。
it might be overkill
重新发明轮子才是真正的矫枉过正。有很多用于存储和加载数据的库和方法。
既然您想将数据存储在本地文件中,又想在数据中进行搜索,那么嵌入式 SQL 数据库应该是您不错的选择。 SQLite、h2 或 HSQL.
为了访问数据,您可以使用从普通 JDBC 到 Spring Data JPA
的任何东西你也可以考虑另一个Simple in-memory DB作为H2。它将数据保存在关系数据库中,该数据库作为文件存储在您的计算机中。优点是它具有高检索速度基准。 H2
优点是配置非常简单,只需创建数据库对象并将其配置为使用内存文件即可。