繁体   English   中英

如何在不丢失太多信息的情况下将对象压缩为字符串

[英]How to compress objects into strings without losing too much information

试图弄清楚如何创建一个可以基于文本文件创建对象的类。 如果接口Readable具有String asString()方法,并且类中的Readable read(String s)方法将基于字符串s构造一个Readable对象,从而实现(read(String s).asString())。等于,如果正在写入/读取的Readable类型仅具有原始参数,我已经能够使用反射轻松地写入读取,但是我不确定在构造函数时如何编写它们以轻松地在字符串之间进行转换以任意顺序获取任意数量的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的容器。 我了解如何编写基于字符串的read方法,但是如何在保留所有必要信息的同时将对象压缩为字符串?

可以使用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字节码!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM