Serializacja

Writing /home/grochu/public_html/wiki/data/meta/zajecia/java_2026_1/sidebar.meta failed
Unable to save metadata file. Hint: disk full; file permissions; safe_mode setting.
  • Serializacja - zamiana obiektu na ciąg bajtów (zapis, przesył sieciowy).
  • Klasa musi implementować marker java.io.Serializable.
  • Pola transient są pomijane podczas serializacji.
  • serialVersionUID - wersja klasy, zalecane do deklarowania.
import java.io.*;
 
class Student implements Serializable {
    private static final long serialVersionUID = 1L;
    String name;
    int grade;
    transient String password; // nie będzie serializowane
 
    Student(String name, int grade) { this.name = name; this.grade = grade; }
}
 
// Zapis (serializacja)
try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("student.ser"))) {
    oos.writeObject(new Student("Ania", 5));
}
 
// Odczyt (deserializacja)
try (ObjectInputStream ois = new ObjectInputStream(
        new FileInputStream("student.ser"))) {
    Student s = (Student) ois.readObject();
    System.out.println(s.name + " - " + s.grade);
}

Przykłady praktyczne

Przetwarzanie listy studentów:

record Student(String name, int grade, String group) {}
 
List<Student> students = List.of(
    new Student("Ania",    5, "A"),
    new Student("Bartosz", 3, "B"),
    new Student("Ola",     4, "A"),
    new Student("Adam",    5, "B"),
    new Student("Beata",   3, "A")
);
 
// Najlepsi studenci z grupy A, posortowani alfabetycznie
List<String> topA = students.stream()
    .filter(s -> s.group().equals("A") && s.grade() >= 4)
    .sorted(Comparator.comparing(Student::name))
    .map(Student::name)
    .collect(Collectors.toList());
System.out.println(topA); // [Ania, Ola]
 
// Średnia ocena per grupa
Map<String, Double> avgByGroup = students.stream()
    .collect(Collectors.groupingBy(Student::group,
             Collectors.averagingInt(Student::grade)));
System.out.println(avgByGroup); // {A=4.0, B=4.0}
 
// Zapis do pliku
Path out = Path.of("students.txt");
Files.write(out, students.stream()
    .map(s -> s.name() + "," + s.grade() + "," + s.group())
    .collect(Collectors.toList()));