0

试图弄清楚如何创建一个可以基于文本文件创建对象的类。如果Readable接口有方法String asString(),而类中的Readable方法read(String s)就是根据字符串s构造一个Readable对象,这样(read(String s).asString())。等于(s),如果正在写入/读取的可读类型只有原始参数,我已经能够使用反射轻松写入读取,但我不确定如何编写它们以便在构造函数时轻松转换为字符串和从字符串转换以任意顺序获取任意数量的 Readable 类。对于仅使用原语,asString 方法如下所示:

private int n, double d;
...
public String asString(){
    return "@"+getClass().getName()+"#i%d#"+this.n+"%"+this.d;
}

这些符号是允许我使用 String.split 的任意字符,并且 i 和 d 给出了字段 n 和 d 的原始类型,因为 Class.forName 不适用于原始类型。这个问题需要我有大约 7 层嵌套的 Readables,然而,其中一些有任意数量的 Readables 的容器。我了解如何基于字符串编写读取方法,但是如何在保留所有必要信息的同时将对象压缩为字符串?

4

2 回答 2

2

这可以通过 Java API:ObjectOutputStreamObjectInputStream.

您的类需要实现java.io.Serializable要写入流/从流创建的接口。

例子:

public class WriteMe implements java.io.Serializable {
    private static final long serialVersionUID = 1234567890L; // Should be generated

    private int myInt = 164;
    private Date myDate = new Date();
    private transient int money = 1648; // Will be ignored
}

在您的主要课程中:

public class HelloStackoverflow {
    public static void main(String[] args) {
        ObjectOutputStream os = new ObjectOutputStream(System.out); // Print to standard output
        os.writeObject(new WriteMe());
    }
}

您可以对 ObjectInputStream 和 .readObject() 执行相同的操作。

如果要将对象存储为String,则应使用 Base64 对其进行编码,因为输出将是 Java-Bytecode!

于 2014-10-08T10:08:00.467 回答
0

正如提图斯已经说过的 - 为什么要再次发明轮子。有了 ObjectOutputStream 和 ObjectInputStream java 已经有了这样的机制

于 2014-10-08T09:58:49.680 回答