序列化包含数组和 int 的对象

And*_*ton 5 java serialization

我一直在尝试实现一种将一些对象保存在文件中的方法,这样我就可以减少每次运行时填充变量的需要,这可能需要 20 分钟以上的时间。我目前正在使用一个名为 Raster 的对象,可以使用用于将数据拉入字段的文件类型来填充该对象。我想知道如何能够序列化以下内容。

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];
    }
}
Run Code Online (Sandbox Code Playgroud)

我看过一些其他示例,但它们似乎都特定于对象内部数组以外的其他类型的数据,因此我希望有人能够解释一种我可以序列化它的方法。

PS我已经编辑了代码以更好地解释我的问题,因为它似乎不够清楚。当使用序列化这个类时,会出现如下错误:

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)
Run Code Online (Sandbox Code Playgroud)

当我运行我的代码时,看起来像这样

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();
            }
Run Code Online (Sandbox Code Playgroud)

use*_*421 1

您正在尝试从空文件反序列化。