Я сохраняю объект класса в строку с помощью метода toString()
. Теперь я хочу преобразовать строку в этот объект класса.
Как это сделать? Пожалуйста, помогите мне с исходным кодом.
Я сохраняю объект класса в строку с помощью метода toString()
. Теперь я хочу преобразовать строку в этот объект класса.
Как это сделать? Пожалуйста, помогите мне с исходным кодом.
Я сохраняю объект класса в строку, используя метод toString(). Теперь я хочу преобразовать строку в этот объект класса.
Ваш вопрос неоднозначен. Это может означать по крайней мере две разные вещи, одна из которых... ну... серьезное заблуждение с вашей стороны.
Если вы сделали это:
SomeClass object = ...
String s = object.toString();
то ответ заключается в том, что нет простого способа превратить s
обратно в экземпляр SomeClass
. Вы не могли этого сделать, даже если метод toString()
дал вам одну из этих фанковых строк "SomeClass @xxxxxxxx". (Эта строка не кодирует состояние объекта или даже ссылку на объект. Часть xxxxxxxx является хэш-кодом идентификатора объекта. Она не уникальна и не может быть волшебным образом возвращена в ссылку на объект.)
Единственный способ вернуть результат toString
обратно в объект:
SomeClass.toString()
так, чтобы он включал все соответствующие состояния для объекта в созданной String иtoString()
.Это, вероятно, плохой подход. Конечно, для нетривиальных классов очень много работы.
Если вы сделали что-то вроде этого:
SomeClass object = ...
Class c = object.getClass();
String cn = c.toString();
то вы можете получить тот же объект Class
назад (т.е. тот, который находится в c
) следующим образом:
Class c2 = Class.forName(cn);
Это дает вам Class
, но нет волшебного способа восстановить исходный экземпляр, используя его. (Очевидно, что имя класса не содержит состояния объекта.)
Если вы ищете способ сериализации/десериализации произвольного объекта, не прилагая усилий к кодированию методов unparse/parse самостоятельно, то вы не должны использовать метод toString()
в все. Вот несколько альтернатив, которые вы можете использовать:
Каждый из этих подходов имеет свои преимущества и недостатки, о которых я не буду вдаваться здесь.
Гораздо проще это сделать: вам понадобится com.google.gson.Gson для преобразования объекта в строку json для потоковой передачи
для преобразования объекта в строку json для потоковой передачи ниже кода
Gson gson = new Gson();
String jsonString = gson.toJson(MyObject);
Чтобы преобразовать обратно строку json в объект, используя код ниже:
Gson gson = new Gson();
MyObject = gson.fromJson(decodedString , MyObjectClass.class);
Более простой способ конвертировать объект для потоковой передачи и чтения с другой стороны. Надеюсь это поможет. - Vishesh
Class.forName(nameString).newInstance();
Я сохраняю объект класса в строку, используя метод toString(). Теперь я хочу преобразовать строку в этот объект класса.
Во-первых, если я понимаю ваш вопрос, вы хотите сохранить свой объект в String, а затем позже, чтобы снова прочитать его и заново создать объект.
Лично, когда мне нужно это сделать, я использую ObjectOutputStream. Однако есть обязательное условие. Объект, который вы хотите преобразовать в String, а затем назад к объекту, должен быть объектом Serializable, а также всеми его атрибутами.
Пусть рассмотрим ReadWriteObject
, объект для манипулирования и ReadWriteTest
манипулятор.
Вот как я это сделаю:
public class ReadWriteObject implements Serializable {
/** Serial Version UID */
private static final long serialVersionUID = 8008750006656191706L;
private int age;
private String firstName;
private String lastName;
/**
* @param age
* @param firstName
* @param lastName
*/
public ReadWriteObject(int age, String firstName, String lastName) {
super();
this.age = age;
this.firstName = firstName;
this.lastName = lastName;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "ReadWriteObject [age=" + age + ", firstName=" + firstName + ", lastName=" + lastName + "]";
}
}
public class ReadWriteTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// Create Object to write and then to read
// This object must be Serializable, and all its subobjects as well
ReadWriteObject inputObject = new ReadWriteObject(18, "John", "Doe");
// Read Write Object test
// Write Object into a Byte Array
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(inputObject);
byte[] rawData = baos.toByteArray();
String rawString = new String(rawData);
System.out.println(rawString);
// Read Object from the Byte Array
byte[] byteArrayFromString = rawString.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(byteArrayFromString);
ObjectInputStream ois = new ObjectInputStream(bais);
Object outputObject = ois.readObject();
System.out.println(outputObject);
}
}
Стандартный вывод аналогичен этому (на самом деле, я не могу его скопировать/вставить):
¬í ?sr ?*com.ajoumady.stackoverflow.ReadWriteObjecto$˲é¦LÚ ?I ?ageL ?firstNamet ?Ljava/lang/String;L ?lastNameq ~ ?xp ?t ?John ?Doe
ReadWriteObject [age=18, firstName=John, lastName=Doe]
Как утверждают другие, ваш вопрос в лучшем случае неоднозначен. Проблема в том, что вы хотите представить объект как строку, а затем сможете снова построить объект из этой строки.
Однако обратите внимание, что, хотя многие типы объектов в Java имеют строковые представления, это не гарантирует, что объект может быть построен из его строкового представления.
Чтобы процитировать этот источник,
Сериализация объектов - это процесс сохранения состояния объекта в последовательности байтов, а также процесс перестройки этих байтов в живой объект в будущем.
Итак, вы видите, что вы хотите, возможно, не удастся. Но можно сохранить состояние объекта в байтовой последовательности, а затем восстановить его из этой последовательности байтов.
Возможно, вы захотите сделать это с помощью json.
Преобразуйте bean (*) в json, а затем обратно.
этот процесс известен как сериализация и десериализация
читайте об этом здесь
(*) Не используйте только члены в качестве источника данных, создавайте геттеры и сеттеры для каждого члена вашего объекта.
Продолжая мой комментарий. toString
не является решением. Некоторая хорошая душа написала целый код для сериализации и десериализации объекта в Java. См. Здесь: http://www.javabeginner.com/uncategorized/java-serialization
Предлагаемое чтение:
Вы не можете сохранить объект класса в строку, используя toString(), toString() возвращает только строковое представление вашего объекта - любым удобным для вас способом. Возможно, вам захочется немного почитать о Сериализация.
Вы можете использовать инструкцию: -
Class c = s.getClass();
Получить экземпляр класса.