gpt4 book ai didi

java - 如何将对象压缩为字符串而不丢失太多信息

转载 作者:行者123 更新时间:2023-12-02 05:23:46 25 4
gpt4 key购买 nike

试图弄清楚如何创建一个可以基于文本文件创建对象的类。如果接口(interface)Readable有方法String asString(),而类中的方法Readable read(String s)是根据字符串s构造一个Readable对象,那么(read(String s).asString())。 equals(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 层嵌套 Readable,但是其中一些具有任意数量 Readable 的容器。我了解如何编写基于字符串的读取方法,但是如何将对象压缩为字符串,同时保留所有必要的信息?

最佳答案

这可以通过 Java API 来完成:ObjectOutputStreamObjectInputStream

您的类需要实现java.io.Serialized接口(interface)才能写入流/从流创建。

示例:

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 - 如何将对象压缩为字符串而不丢失太多信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26253929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com