
Tehát mi is történik itt. Első körben létre kell hoznunk egy package-t, amiben elkezdünk dolgozni. Ez nálam nemes egyszerűséggel or.g hqa.serialization. Ebben szükségünk lesz egy osztályra, aminek az állapotot szerializálni szeretnénk. Két fontos dolog látszik itt, az egyik, hogy az osztályunknak szüksége van a Serializable interface-re, illetve kell egy serialVersionUID property is. Nálam a lustaság győzött, így lombok annotációk segítségével csökkentem le a megírt sorok számát.
Elöljáróban még annyit, hogy nem vagyok java fejlesztő, csak tanulom, tanulgatom a nyelvet, ami szakavatott szem számára biztosan szemet szúr. Így aztán szívesen fogadok észrevételeket, javítási szándékokat, hogy a példakódom jobb minőségű legyen.
package org.hqa.serialization;
import lombok.*;
import java.io.Serializable;
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Builder
@Getter
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String firstName;
private String lastName;
private int age;
}
Szükség van ezen kívül még egy másik osztályra, amiben megtalálható a main függvény, mint első belépési pont. Majd pedig szintén a lustaság győzött, hiszen ez egy példa kód, így maga a szerializáció és deszerializáció is itt foglal helyet.
package org.hqa.serialization;
import java.io.*;
public class SerializeMain {
private static final String fileName = "dev.dat";
public static void main(String[] args) throws IOException, NullPointerException {
Person uncleBob = new Person().builder()
.firstName("Robert")
.lastName("Martin")
.age(71)
.build();
if (!isFileExists(fileName)) {
serializeFunctionality(uncleBob);
} else {
try {
Person p = (Person) deSerializeFunctionality(fileName);
System.out.println(String.format("First name: %s.", p.getFirstName()));
System.out.println(String.format("Last name: %s.", p.getLastName()));
System.out.println(String.format("Age: %d", p.getAge()));
deleteFile(fileName);
} catch (NullPointerException n) {
throw new NullPointerException(n.toString());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
private static void serializeFunctionality(Object o) throws IOException {
try {
FileOutputStream file = new FileOutputStream(fileName);
ObjectOutputStream out = new ObjectOutputStream(file);
out.writeObject(o);
System.out.println(o.toString());
out.close();
file.close();
System.out.println(String.format("%s was saved.", fileName));
} catch (IOException i) {
throw new IOException(i);
}
}
private static boolean isFileExists(String fileName) {
return new File(fileName).exists();
}
private static Object deSerializeFunctionality(String fileName) throws IOException, ClassNotFoundException {
try {
FileInputStream file = new FileInputStream(fileName);
ObjectInputStream in = new ObjectInputStream(file);
Object o = in.readObject();
System.out.println(o.toString());
in.close();
file.close();
return o;
} catch (IOException i) {
throw new IOException(i);
} catch (ClassNotFoundException c) {
throw new ClassNotFoundException(c.toString());
}
}
private static void deleteFile(String fileName) throws Exception {
if(isFileExists(fileName))
{
try {
File myFile = new File((fileName));
myFile.delete();
myFile.exists();
System.out.println(String.format("%s was deleted.", fileName));
} catch (Exception e) {
throw new Exception(e);
}
}
}
}
folytatás folyamatban...
- A hozzászóláshoz regisztráció és bejelentkezés szükséges