com.company.Przyklad03@22d8cfe0 при чтении обьекта из файла.ser - Java
я пытаюсь записать обьект в файл.ser, и у меня вроде это получилось, но когда я
хочу считать этот файл и вывести это в консоли то получаю это com.company.Przyklad03@22d8cfe0
Вот мой код
Запись обьекта:
package com.company;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Przyklad03 implements Serializable {
private String test;
private void setTest(String s) {
test = s;
}
public static void main(String[] args) {
Przyklad03 przyklad03 = new Przyklad03();
przyklad03.setTest("Ta tresc bedzie zapisana w pliku...");
try {
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("przyklad03.ser"));
o.writeObject(przyklad03);
o.close();
} catch (Exception exc) {
exc.printStackTrace();
}
}
}
Чтение обьекта:
package com.company;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.Serializable;
public class Przyklad04 implements Serializable {
public static void main(String[] args) {
try {
ObjectInputStream o = new ObjectInputStream(new FileInputStream("przyklad03.ser"));
Przyklad03 obj = (Przyklad03) o.readObject();
o.close();
System.out.print(obj);
} catch (Exception exc) {
exc.printStackTrace();
}
}
}
Ответы (2 шт):
Вот здесь описана похожая ситуация
В вашем случае программа отработала корректно.
Если вы хотите, чтобы при вызове System.out.print(obj); выводилась какая-то информация, вам необходимо в классе Przyklad03 создать метод
public String toString() {
return test;
// Или что угодно вместо:
// return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Можно сделать иначе, например так:
System.out.print(obj.getText());
Тогда вам нужно создать метод
public String getText() {
return test;
}
Суть в том, что при System.out.print(obj); компилятор автоматически вызывает System.out.print(obj.toString());, поэтому более элегантно было бы переопределить этот метод.
Но почему переопределить, я же ни от кого не наследовался?
На самом деле все классы в Java наследуются от класса Object, где реализован toString()
Однако можно и просто создать отдельную функцию, например getText()
package com.company;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Przyklad03 implements Serializable {
private String test;
@Override
public String toString() {
return test;
}
private void setTest(String s) {
test = s;
}
public static void main(String[] args) {
Przyklad03 przyklad03 = new Przyklad03();
przyklad03.setTest("Ta tresc bedzie zapisana w pliku...");
try {
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("przyklad03.ser"));
o.writeObject(przyklad03);
o.close();
} catch (Exception exc) {
exc.printStackTrace();
}
}
}