CodeGym /Java курс /Модул 2: Java Core /Сериализация. Началото.

Сериализация. Началото.

Модул 2: Java Core
Ниво , Урок
На разположение

„Сигурно си спомняте, че днес изследвахме записването на обекти и четенето им от файл?“

„Да, току-що записахме в изходен поток, четене от входен поток.“

„Браво, Амиго. Радвам се да чуя, че забелязваш тези подробности. Бихте ли могли да завършите codeа, така че да записва и чете от файл?“

„Какво да завършите?! Декларирайте FileInputStream и FileOutputStream и ги предайте на методите за запазване и зареждане. Тук няма Howво да се бъркате. Супер просто.“

„Радвам се за вас. Сега за нова тема: сериализация .“

Сериализацията е почти същата като това, което току-що направихме, но много по-готина и вградена направо в Java машината. Java машината може да съхранява и зарежда своите обекти. Дори не се нуждае от методите за запазване и зареждане, за да го направи: Всички обекти се съхраняват в Java машината и тя има пълен достъп до тях."

Просто вземаме обекта и го запазваме в поток и четем от поток:

Код
public static void main(String[] args) throws Exception
{
 Cat cat = new Cat();

 //Save a cat to file
 FileOutputStream fileOutput = new FileOutputStream("cat.dat");
 ObjectOutputStream outputStream = new ObjectOutputStream(fileOutput);
 outputStream.writeObject(cat);
 fileOutput.close();
 outputStream.close();

 //Load a cat from file
 FileInputStream fiStream = new FileInputStream("cat.dat");
 ObjectInputStream objectStream = new ObjectInputStream(fiStream);
 Object object = objectStream.readObject();
 fiStream.close();
 objectStream.close();

 Cat newCat = (Cat)object;
}

"Това е?"

"Точно така. Има много голям и сложен механизъм за сериализиране , който ни позволява да записваме в поток и да четем от поток от почти всеки тип данни."

„Почти всяHowви. Значи не всеки тип данни?“

„Да, факт е, че не всички обекти имат присъщата способност да бъдат запазени . Някои обекти не съхраняват всичките си данни вътрешно. Вместо това те просто препращат към други обекти и/or източници на данни. Например конзолата (System. в), входен поток (InputStream) и други неща."

Ето защо създателите на Java измислиха специалния интерфейсен маркер Serializable . Нарича се маркер , защото не съдържа ниHowви данни и методи. Използва се само за „маркиране“ or „маркиране“ на класове. Ако вярваме, че нашият клас съхранява всичките си данни вътрешно, тогава можем да го маркираме с implements Serializable .

Ето пример за „котка“ с поддръжка за сериализация:

Код
class Cat implements Serializable
{
 public String name;
 public int age;
 public int weight;
}

Когато се опитаме да сериализираме (запазим) обект, Java машината проверява дали поддържа сериализация: Реализира ли интерфейса Serializable? Ако го направи, тогава той записва обекта. Ако не, тогава той хвърля изключение, за да покаже, че сериализирането е невъзможно.
Тук трябва да разберете, че един сериализиращ се обект трябва да се състои само от сериализуеми обекти.

"Е, това има смисъл. Не можете да спасите цялото, без да запазите неговите части."

"Точно."

„А Howво ще кажете за ints, Strings и ArrayLists?“

"Всички те поддържат сериализация. Създателите на Java са се погрижor специално да се уверят, че това се случва. Тук не би трябвало да има проблеми."

Освен това, типът на обекта се запазва, когато обектът се сериализира. Сега можете да запишете препратка към обект Cat в променлива Object. Всичко ще се сериализира и десериализира добре.

„Десериализиране?“

" Десериализацията е процесът на обръщане на сериализацията: четене и реконструиране на обект от поток/файл."

— А, без повече въпроси тогава.

Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION