我正在使用processing3.0.2为一件处理设备创建一个UI。在操作时,我希望它将其数据本地存储在JSON文件中。但是,我担心随着这个文件的增长,UI会使系统陷入困境。我只是想让它在JSON数组中添加另一个条目。没有被召唤。
JSON文件将从小开始,但可能很快就会有几百MB。因此,显然每15分钟读一次这个文件来写一个新行并不是很有效。我根本不知道java是如何工作的。所以这可能是一个非常noob的问题,但loadJSONArray()是内存密集型步骤吗?如果是这样,是否有某种方法我可以在不加载文件的情况下将另一行文本附加到文件中?或者使用append命令在数组中添加另一个条目而不实际读取任何文件。
答案 0 :(得分:0)
你问过很多广泛的问题,回答它们的唯一方法就是实际编写代码并测试它。在阅读我的其余答案之前,你应该这样做。
如果您担心做一些需要很长时间的事情,您应该考虑使用线程,以便您的主程序可以继续执行代码。考虑这个草图:
void setup(){
size(500, 500);
}
void mousePressed(){
delay(5000);
}
void draw(){
background(0);
ellipse(mouseX, mouseY, 50, 50);
}
此代码调用delay()
函数,该函数阻止主线程,这会导致程序停止响应。这与加载或保存大文件完全相同。
但是,您可以通过使用另一个线程来处理长任务来确保您的程序具有响应性:
void setup(){
size(500, 500);
}
void mousePressed(){
new Thread(){
public void run(){
println("Waiting.");
delay(5000);
println("Done waiting.");
}
}.start();
}
void draw(){
background(0);
ellipse(mouseX, mouseY, 50, 50);
}
线程可能变得非常复杂,但是如果你问如何确保你的程序响应即使你可能需要加载大文件,那么它们肯定是一种值得研究的方法。
如果你问是否可以附加到文件,那么答案是肯定的。只需使用FileOutputStream
并将true
传递给其构造函数,告诉它附加到文件中:
PrintWriter pw= new PrintWriter(new BufferedWriter(new FileWriter("YourFileName.txt", true)));
out.println("Your JSON goes here");
out.close();
这两种方法都只支持Java,如果你使用它们,你将无法部署为Processing.js。他们也比大多数处理草图需要的更多动手,所以就像我在开头说的那样:确保在尝试解决之前确实遇到了问题。