所以我一直在尝试实现一种方法来保存文件中的一些对象,以便我可以减少每个运行时间填充变量的需要,这可能需要20分钟。我目前正在使用一个名为Raster的对象,它可以使用类型File填充,用于将数据拉入字段。我想知道我将如何序列化以下内容。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Serializable;
public class Raster implements Serializable {
private static final long serialVersionUID = 15L;
private int col,row,NODATA;
private double [] [] Ras;
public Raster (File inData) throws IOException
{
//open file as f
BufferedReader f = new BufferedReader(new FileReader(inData));
this.col = Integer.parseInt(f.readLine().substring(5).trim());
this.row = Integer.parseInt(f.readLine().substring(5).trim());
f.readLine();
f.readLine();
f.readLine();
this.NODATA = Integer.parseInt(f.readLine().substring(12).trim());
//now the data will be added
this.Ras = new double [row] [col];
for (int r = 0 ; r <row;r ++ )
{
String[] vals = f.readLine().split(" ");
for (int c = 0 ; c < col; c ++ )
this.Ras[r][c]= Double.parseDouble(vals[c]);
}
f.close();
}
public int getRows() {
return row;
}
public int getCols() {
return col;
}
public double getData(int rowPos, int colPos) {
return Ras[rowPos][colPos];
}
}
我已经看了一些其他的例子,但它们似乎都非常特定于除了对象内部的数组之外的其他类型的数据,所以我希望有人能够解释一种我可能能够序列化的方式此
P.S。 我编辑了代码以更好地解释我的问题,因为它sems它不够清楚。当使用序列化这个类时,会出现如下错误:
Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
当我运行看起来像这样的代码时
if (rasPath.exists()) {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(rasPath));
Raster SqrRas = (Raster) (in).readObject();
in.close();
}
else {
Raster SqrRas = new Raster (fullPath);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(rasPath));
out.writeObject(SqrRas);
out.close();
}
答案 0 :(得分:1)
您正尝试从空文件反序列化。
答案 1 :(得分:-1)
关于我的问题,我发现它实际上是由于我的路径名称有一个不准确的扩展名,从而阻止了数据的定位。一切都很好