2015-11-01 2 views
2

это мой первый пост здесь, но я действительно нужна помощь на этом, потому что я только начинаю, чтобы узнать о сериализации/десериализации в Java:десериализации из строки в 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"]"; 
    } 
} 

Может быть, я не до конца понял концепцию десериализации еще, но, надеюсь, я мог бы получить вход здесь и выяснить, что я попытка сделать не будет работать или не имеет смысла. Спасибо заранее!

+0

Следующие могут помочь http: // stackoverflow.com/questions/12963445/serialization-readobject-writeobject-overides –

+1

То, что вам «кажется» нужно сделать, это проанализировать значение «String» обратно в представлении «Object», на самом деле это не так, как это делает сериализация. объект и генерирует двоичное представление, которое может быть сохранено в файл или передано по проводу на другой компьютер. Для вашей проблемы вам нужно написать код, который может извлекать значения из 'String', для чего вам нужно создать новый экземпляр класса – MadProgrammer

+0

. Реализация toString не сериализует –

ответ

0

Со струнами это довольно просто.

Объект может быть сериализован, поскольку он реализует интерфейс Serializable.

Строковые свойства также будут сериализованы, поскольку они также могут быть сериализованы.

Вы можете сериализовать любой сериализуемый объект, вызвав его метод writeObject.

Вы можете десериализовать любой объект, вызвав его метод readObject.

Вы можете отправить сериализуемый объект через любой канал связи. Обычно этот процесс включает в себя запись его на какой-то экземпляр расширения OutputStream с использованием его метода writeObject, а затем его чтение с какого-то экземпляра расширения InputStream с использованием его метода readObject.

Действительно простой, очень простой, особенно если переходные свойства не задействованы, и вам даже не нужно реализовывать свои собственные методы сериализации/десериализации.

Если у вас есть дополнительные сомнения, официальная документация Oracle на serializable objects может вам очень помочь. Для практических примеров см. Другие ответы, такие как How to send and receive serialized object in socket channel

Тема много обсуждалась на протяжении многих лет, и вы можете найти действительно хорошие источники в Интернете. Если у вас есть какие-либо конкретные вопросы по вашему конкретному случаю использования, не стесняйтесь спрашивать их.

0

Непонятно, что вы просите. То, что вы описали, составляет парсинг a Строка, а не десериализация это, что тривиально.

Проблема с вашим вторым примером, похоже, начинается с метода toString(). Почему это вообще? Просто сериализуйте действительный объект , а не результат его метода toString() и десериализуйте его напрямую. Строки вообще не входят в нее.

Смежные вопросы