我的自定义类的序列化/反序列化并将其保存到二进制文件

时间:2016-06-10 13:25:12

标签: java file serialization deserialization

我在项目中声明了一个自定义类:

public class LocationData {

    private Location location;
    private LocalDateTime localDateTime;
    private int heartRate;
    private int calories;
    private int ropeMoves;
    private int dumbbellMoves;
    private int pedalRotations;
    private int wheelRotations;
    private int numberOfSteps;

    public LocationData(Location location, LocalDateTime localDateTime, int heartRate, int calories, int ropeMoves, int dumbbellMoves, int pedalRotation, int wheelRotations, int numberOfSteps) {
        this.location = location;
        this.localDateTime = localDateTime;
        this.heartRate = heartRate;
        this.calories = calories;
        this.ropeMoves = ropeMoves;
        this.dumbbellMoves = dumbbellMoves;
        this.pedalRotations = pedalRotations;
        this.wheelRotations = wheelRotations;
        this.numberOfSteps = numberOfSteps;
    }

    public Location getLocation() {
        return location;
    }

    public LocalDateTime getLocalDateTime() {
        return localDateTime;
    }

    // Other getters

    @Override
    public String toString() {
        return "LocationData[" +
                "\n\tlocation=" + location +
                "\n\tlocalDateTime=" + localDateTime +
                "\n\tcalories=" + calories +
                "\n\theartRate=" + heartRate +
                "\n\tropeMoves=" + ropeMoves +
                "\n\tdumbbellMoves=" + dumbbellMoves +
                "\n\tpedalRotations=" + pedalRotations +
                "\n\twheelRotations=" + wheelRotations +
                "\n\tnumberOfSteps=" + numberOfSteps +
                "]";
    }
}

它代表一个位置加上一些信息。然后我保存List LocationData来创建"路线"。

我需要将此列表(称为location)保存到文件中,因为将来用户会要求检索它以创建GPX文件。

我认为最好的解决方案是使LocationData类可序列化,但我不知道如何序列化(然后反序列化)它。所以...我需要了解如何:

  1. 序列化LocationData
  2. 反序列化LocationData
  3. 创建序列化LocationData
  4. 的列表
  5. 将列表写入文件
  6. 从文件中读取列表

1 个答案:

答案 0 :(得分:0)

您需要将implements Serializable添加到类定义中,但不必实现Serializable的方法 - 对象已经具有默认实现,并且Serializable接口用作声明性

您还需要确保LocationLocalDateTime都是可序列化的。

最后,一旦完成,您可以使用ObjectInputStream / ObjectOutputStream来读取和写入对象