Java中的字符串反序列化

3
这是我在这里的第一篇帖子,但我真的需要关于Java中序列化/反序列化的帮助,因为我刚开始学习:

我有一个类似于以下内容的字符串:

String str = "ExampleClass[id=123,date=2009-07-12,state=OPEN]";

我的问题是:我能反序列化这个字符串并访问其中的信息吗?我只看到过使用 ObjectOutputStream 和方法 .writeObject() 创建文件,然后从中读取的示例。

我还有一个类,看起来像这样:

public class ExampleClass implements Serializable { 
    protected String id;
    protected Date startDate;
    protected String state;

    //other code...

    public String toString(){
        return "ExampleClass[id="+id+",date="+startDate+",status="state"]";
    }
}

也许我还没有完全理解反序列化的概念,但希望能在这里得到一些指导,并找出我尝试做的事情是否行得通或者是否没有意义。谢谢!

以下内容可能有所帮助 https://dev59.com/wmcs5IYBdhLWcg3wSiJo - Oleg Sklyar
1
你“似乎”想要做的是将String值解析回一个Object表示,这并不是序列化所做的事情,它接受一个对象并生成一个二进制表示,可以存储到文件或传输到另一台计算机。对于你的问题,你需要编写一些代码来提取你需要的String值,然后生成该类的新实例。 - MadProgrammer
实现 toString 方法并不等同于序列化 - Lluis Martinez
2个回答

0

对于字符串来说,这非常简单。

该对象可以被序列化,因为它实现了Serializable接口。

字符串属性也将被序列化,因为它们也是可序列化的。

您可以通过调用其writeObject方法来序列化任何可序列化对象。

您可以通过调用其readObject方法来反序列化任何对象。

你可以通过任何通信渠道发送可序列化的对象。通常,这个过程涉及到使用OutputStream扩展实例的writeObject方法将其写入,并使用InputStream扩展实例的readObject方法从中读取。

非常简单,非常直接,特别是如果没有涉及到瞬态属性,并且你甚至不需要实现自己的特定序列化/反序列化方法。

如果您还有任何疑问,官方的Oracle文档关于可序列化对象可以帮助您很多。对于实际示例,请查看其他答案,例如如何在套接字通道中发送和接收序列化对象

这个主题多年来已经被广泛讨论,您可以在网上找到非常好的资源。如果您对特定用例有任何具体问题,请不要犹豫提出。


0

不清楚你的问题是什么。你所描述的是解析字符串,而不是反序列化它,这是微不足道的。

你第二个例子的问题似乎从toString()方法开始。为什么要有它呢?只需序列化实际对象,而不是其toString()方法的结果,并直接反序列化它。根本不涉及字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接