我有一段代码等待数据来自不稳定的网络。运行代码的机器也可能随时停机。
所以我在程序运行时将传入的数据写入磁盘。如果系统出现故障,我将拥有到那时为止的数据。我可以将每个数据对象保存在单独的 JSON 文件中,但最终会包含数十万个文件。
我想做的是附加到一个可以作为数组或列表读回的 JSON 文件。每次数据进入时,它都会被写入末尾,而不会重新写入旧数据。最好的方法是什么?
我有一段代码等待数据来自不稳定的网络。运行代码的机器也可能随时停机。
所以我在程序运行时将传入的数据写入磁盘。如果系统出现故障,我将拥有到那时为止的数据。我可以将每个数据对象保存在单独的 JSON 文件中,但最终会包含数十万个文件。
我想做的是附加到一个可以作为数组或列表读回的 JSON 文件。每次数据进入时,它都会被写入末尾,而不会重新写入旧数据。最好的方法是什么?
您可以创建一个FileWriter
,true
作为第二个构造函数参数。这使得 aFileWriter
将附加到现有文件,而不是替换它(参见http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html)。
该方法不会改变 OrigArray 的值;它所做的只是在其中存储一个克隆的克隆,因此实际上该值没有改变。
我想你想要的是这样的:
public void expand() {
String[] newArray = new String[OrigArray.length + 1];
System.arraycopy(OrigArray, 0, newArray, 0, OrigArray.length);
//an alternative to using System.arraycopy would be a for-loop:
// for(int i = 0; i < OrigArray.length; i++)
// newArray[i] = OrigArray[i];
OrigArray = newArray;
}
这将创建一个大小比 OrigArray 大 1 的数组,将 OrigArray 的内容复制到其中并将该数组分配给 OrrigArray。除非您想记住 expand() 被调用了多少次,否则不应该有可变大小的理由。