加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:20:32 所属栏目:Java 来源:网络整理
导读:所以我一直在尝试实现一种方法来保存我的文件中的一些对象,以便我可以减少每个运行时间填充变量的需要,这可能需要花费超过20分钟.我目前正在使用一个名为Raster的对象,它可以使用类型File填充,用于将数据拉入字段.我想知道我将如何序列化以下内容. import ja
所以我一直在尝试实现一种方法来保存我的文件中的一些对象,以便我可以减少每个运行时间填充变量的需要,这可能需要花费超过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];
    }
}

我已经看了一些其他的例子,但它们似乎都非常特定于除了对象内部的数组之外的其他类型的数据,所以我希望有人能够解释一种我可能能够序列化它的方式.

附:
我编辑了代码以更好地解释我的问题,因为它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();
            }

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读