Grunnleggende Java-serialisering
Implementer Serializable, skriv objekter til strømmer med ObjectOutputStream og les dem tilbake.
Grunnleggende Java-serialisering er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.
Hva er Java-serialisering?
Serialisering konverterer tilstanden til et objekt til en bytestrøm, slik at den kan lagres på disk, sendes over et nettverk eller lagres i en database. Deserialisering gjør det motsatte.
Markeringsgrensesnittet Serializable
For å serialisere en klasse implementerer du java.io.Serializable. Det har ingen metoder — det signaliserer til JVM-en at forekomster av denne klassen kan serialiseres.
import java.io.Serializable;
public class User implements Serializable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override public String toString() { return name + " / " + age; }
}Skrive et objekt med ObjectOutputStream
Pakk en FileOutputStream inn i en ObjectOutputStream, og kall writeObject() for å serialisere.
import java.io.*;
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("user.ser"))) {
oos.writeObject(new User("Alice", 30));
System.out.println("Serialized successfully");
}Lese et objekt med ObjectInputStream
Pakk en FileInputStream inn i en ObjectInputStream, og kall readObject() for å deserialisere. Konverter resultatet til den forventede typen.
import java.io.*;
try (ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("user.ser"))) {
User u = (User) ois.readObject();
System.out.println("Deserialized: " + u);
}Serialisering av en objektgraf
Alle objekter som det serialiserte objektet refererer til, må også implementere Serializable, ellers kastes NotSerializableException under kjøring.
public class Order implements Serializable {
private User customer; // User must be Serializable
private List<String> items;
public Order(User customer, List<String> items) {
this.customer = customer;
this.items = items;
}
}NotSerializableException
Hvis et felt i objektgrafen ikke er serialiserbart og ikke er merket transient, kaster Java NotSerializableException når dataene skrives.
// Thread is NOT Serializable
public class Task implements Serializable {
private Thread worker; // throws NotSerializableException!
// Fix: mark as transient
private transient Thread worker2;
}Objektgrafen og delte referanser
Java holder oversikt over objektidentitet under serialisering. Hvis to felt refererer til det samme objektet, skrives bare én kopi, og begge feltene peker på den samme deserialiserte instansen.
Serialisering av samlinger
Standardsamlinger som ArrayList, HashMap og LinkedList implementerer allerede Serializable, så de serialiseres så lenge elementene deres gjør det.
List<String> names = new ArrayList<>(List.of("Alice", "Bob"));
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("names.ser"))) {
oos.writeObject(names);
}Arv og serialisering
Hvis en superklasse er Serializable, er alle underklasser også serialiserbare. Hvis superklassen IKKE er serialiserbar, lagres ikke feltene i superklassen; superklassen må ha en konstruktør uten argumenter for at deserialisering skal fungere.
Kontrollere byte-strømmen
Den serialiserte byte-strømmen begynner med magiske byteverdier 0xACED 0x0005. Du kan undersøke den med et heksadesimalt redigeringsverktøy eller dekode den med SerialVer-verktøy for å forstå formatet.
Sikkerhetsadvarsel
Java-deserialisering er en kjent angrepsvektor. Du må aldri deserialisere data fra kilder du ikke stoler på, uten validering. Foretrekk JSON, Protobuf eller signerte konvolutter for eksterne data.
Hurtigsjekk
Hvilken metode serialiserer et objekt til en strøm?
Oppsummering
Java-serialisering bruker ObjectOutputStream / ObjectInputStream. Klasser må implementere Serializable. Unngå å serialisere data du ikke stoler på – foretrekk moderne alternativer i ny kode.
Lær deg Java med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 104
- Leksjoner
- 374
Ofte stilte spørsmål
Er leksjonen «Grunnleggende Java-serialisering» gratis?
Ja – hele teksten i «Grunnleggende Java-serialisering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Grunnleggende Java-serialisering»?
Implementer Serializable, skriv objekter til strømmer med ObjectOutputStream og les dem tilbake. Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Java Academy?
Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Grunnleggende Java-serialisering»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?
Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Grunnleggende Java-serialisering
- transient-felt og serialVersionUID
- Egendefinert serialisering: writeObject og readObject
- Moderne alternativer: JSON og Protocol Buffers