【发布时间】:2016-12-20 13:06:00
【问题描述】:
它们有什么区别?
如何以文本格式存储数据并在需要时检索它?
在我学会 sql 之前,如何以简单的方式存储数据?
try{
FileWriter fileWriter=new FileWriter("C:\\Users\\acer\\Downloads\\java Q//somthing.txt");
fileWriter.write("here is the first text");
fileWriter.append(" \n the secound one ");
fileWriter.close();
} // try
catch(IOException e){
System.out.println(" an error occer ");
} // catch
或者那样
WriteFile writeFile=new WriteFile(); // a class WriteFile the implements Serilizable
try{
FileOutputStream fileOutputStream=new FileOutputStream("C:\\Users\\acer\\Downloads\\java Q//something.ser");
ObjectOutputStream objectoutputs=new ObjectOutputStream(fileOutputStream);
objectoutputs.writeObject(writeFile);
objectoutputs.flush();
objectoutputs.close();
} // try
catch(IOException e){
System.out.println("an error occer");
} // catch
【问题讨论】:
-
这取决于您的软件的要求。序列化可能很危险,请查看this comment 我写的为什么在将状态存储到驱动器时可能希望避免序列化。我推荐一个简单的
FileWriter或将状态存储到Properties文件。如果用户在存储到驱动器时不应该读取数据,您可以创建自己的加密系统来转换正在存储的状态。 -
2016年,“纯java对象序列化”绝对不是你的首选。它有很多限制;甚至安全风险。如果有的话,请考虑将其“序列化”为 JSON 字符串并将其保存为人类可读的文本。这使您的测试变得更加容易;并给出了你幼稚的想法;我猜你会花很多时间……测试和调试。
-
@GhostCat JSON 易于阅读。如果存储到驱动器,用户可以(轻松)访问和编辑 JSON 以利用该软件。还有其他形式的本地持久存储易于测试但难以利用。这在很大程度上取决于他的软件的要求。
-
@VinceEmigh 不确定我是否同意。任何正在读取数据的应用程序都应采取一定的预防措施。如果数据被写入文件,格式真的无关紧要。
-
@GhostCat 格式确实很重要。假设您以 JSON 形式存储用户拥有的现金金额。没有办法仔细检查读取的值是否与写入的值相同。他们可以轻松地给自己无限的现金。这个想法是为了让用户更难(这实际上是所有安全性:增加复杂性)。理论上,任何客户端都可以被利用。目标是使其更难被利用(或将其保留在服务器上)。如果这是一款离线游戏,如果存储为 JSON,用户可以轻松利用该软件(我一直使用 Android 应用程序)。
标签: java database data-structures