Grundlæggende Java-serialisering
Implementér Serializable, skriv objekter til streams med ObjectOutputStream, og læs dem tilbage.
Grundlæggende Java-serialisering er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.
Hvad er Java-serialisering
Serialisering konverterer et objekts tilstand til en byte-strøm, så den kan gemmes på en disk, sendes over et netværk eller lagres i en database. Deserialisering udfører den omvendte proces.
Markørgrænsefladen Serializable
Hvis du vil serialisere en klasse, skal du implementere java.io.Serializable. Den har ingen metoder — den signalerer til JVM'en, at instanser af denne klasse 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; }
}Skriv et objekt med ObjectOutputStream
Pak en FileOutputStream ind i en ObjectOutputStream, og kald writeObject() for at serialisere.
import java.io.*;
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("user.ser"))) {
oos.writeObject(new User("Alice", 30));
System.out.println("Serialized successfully");
}Læs et objekt med ObjectInputStream
Pak en FileInputStream ind i en ObjectInputStream, og kald readObject() for at deserialisere. Konvertér resultatet til den forventede type.
import java.io.*;
try (ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("user.ser"))) {
User u = (User) ois.readObject();
System.out.println("Deserialized: " + u);
}Serialisering af en objektgraf
Alle objekter, som det serialiserede objekt refererer til, skal også implementere Serializable, ellers kastes der en NotSerializableException under kørsel.
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 kan serialiseres og ikke er markeret med transient, kaster Java en NotSerializableException under skrivningen.
// 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 referencer
Java holder styr på objektidentitet under serialisering. Hvis to felter refererer til det samme objekt, skrives der kun én kopi, og begge felter peger på den samme deserialiserede instans.
Serialisering af samlinger
Standardsamlinger som ArrayList, HashMap og LinkedList implementerer allerede Serializable, så de kan serialiseres, så længe deres elementer også kan det.
List<String> names = new ArrayList<>(List.of("Alice", "Bob"));
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("names.ser"))) {
oos.writeObject(names);
}Nedarvning og serialisering
Hvis en superklasse er Serializable, kan alle underklasser også serialiseres. Hvis superklassen IKKE kan serialiseres, gemmes superklassens felter ikke; superklassen skal have en konstruktør uden argumenter for at kunne deserialiseres.
Verificering af bytestrømmen
Den serialiserede bytestrøm begynder med de magiske bytes 0xACED 0x0005. Du kan undersøge den med en hex-editor eller afkode den med værktøjer fra SerialVer for at forstå formatet.
Sikkerhedsadvarsel
Deserialisering i Java er en kendt angrebsvektor. Du må aldrig deserialisere data fra kilder, du ikke har tillid til, uden validering. Foretræk JSON, Protobuf eller signerede dataindpakninger til eksterne data.
Hurtigt tjek
Hvilken metode serialiserer et objekt til en strøm?
Opsummering
Javas serialisering bruger ObjectOutputStream og ObjectInputStream. Klasser skal implementere Serializable. Undgå at serialisere data, du ikke har tillid til — foretræk moderne alternativer til ny kode.
Lær Java med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 104
- Lektioner
- 374
Ofte stillede spørgsmål
Er lektionen “Grundlæggende Java-serialisering” gratis?
Ja — hele teksten til “Grundlæggende Java-serialisering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Grundlæggende Java-serialisering”?
Implementér Serializable, skriv objekter til streams med ObjectOutputStream, og læs dem tilbage. Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Java Academy?
Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Grundlæggende Java-serialisering”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Java Academy-lektion?
Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Grundlæggende Java-serialisering
- transient-felter og serialVersionUID
- Brugerdefineret serialisering: writeObject og readObject
- Moderne alternativer: JSON og Protocol Buffers