将对象序列化为字符串

时间:2019-09-04 20:53:22

标签: java

有人可以帮助我将一个对象序列化为字符串吗?我的代码的结果有点奇怪,我需要获取一个toString();。 methode或可以将对象序列化为字符串的东西,但我什么都不知道。

感谢您的帮助

结果为getString->仅“空”

没有getString()的结果; -> Fruit @ 4dd8dc3,Fruit @ 6d03e736,Fruit @ 568db2f2,Fruit @ 378bf509,Fruit @ 5fd0d5ae, Fruit @ 2d98a335,Fruit @ 16b98e56,Fruit @ 7ef20235“

import java.io.Serializable;

public class Fruit implements Comparable<Fruit>,Serializable{

    String getString;
    String name;
    int gewicht;

    public String getString() {

            return this.getString;

          }

    public Fruit(String name, int gewicht) {
        this.name=name;
        this.gewicht=gewicht;
    }

    public int compareTo(Fruit otherFruit) {

        if(this.gewicht < otherFruit.gewicht)
            return -1;
        if(this.gewicht>otherFruit.gewicht)
            return 1;
        return 0;
    }


}




import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Iterator;
import java.util.TreeSet;

public class FruitTree {

    public static void main(String[] args) {

        TreeSet<Fruit> fruitTree = new TreeSet<Fruit>();

        fruitTree.add(new Fruit("Kiwi",5));
        fruitTree.add(new Fruit("Kirsche",1));
        fruitTree.add(new Fruit("Ananas",75));
        fruitTree.add(new Fruit("Zitrone",15));
        fruitTree.add(new Fruit("Grapefruit",44));
        fruitTree.add(new Fruit("Banane",55));
        fruitTree.add(new Fruit("Kirsche",2));
        fruitTree.add(new Fruit("Kiwi",8));

        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("IO.txt"));
            Iterator<Fruit> it = fruitTree.iterator();



            while(it.hasNext()) {
            oos.writeObject(it.next());
        }
            oos.writeObject(null);



            ObjectInputStream ois = new ObjectInputStream (new FileInputStream("IO.txt"));

            Object readObject=null;
            TreeSet<Fruit> deserializedFruits= new TreeSet<Fruit>();

            do {
                readObject=ois.readObject();
                if(readObject !=null)
                    deserializedFruits.add((Fruit) readObject);
            }
            while (readObject!=null);

            it=deserializedFruits.iterator();
            while(it.hasNext()) {
                System.out.println(it.next().getString());
                ois.close();
                oos.close();
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }


        }




    }

有人可以帮助我将一个对象序列化为字符串吗?我的代码的结果有点奇怪,我需要获取一个toString();。 methode或可以将对象序列化为字符串的东西,但我什么都不知道。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

在类中添加implements Serializable不会覆盖默认的Object.toString实现-这不是Java的工作方式(顺便说一句,该默认实现实际上将为您提供所获得的东西-例如Fruit@5fd0d5ae-如何运作)

您需要做的就是自己覆盖toString-例如

public class Fruit implements Comparable<Fruit>,Serializable {
    // ...

    @Override
    public String toString() {
        return "name: " + this.name + ", gewicht: " + String.valueOf(this.gewicht);
    }
}

或使用一些可以为您生成此方法的现有工具(例如lombok),甚至更好的方法是,它允许您将类对象序列化为某些常见格式,例如 JSON 或XML(为此请查看gsonJackson