Java ObjectInputStream: Uitgebreide gids voor deserialisatie
Java ObjectInputStream-klasse
Ontdek hoe je geserialiseerde objecten in Java leest met ObjectInputStream, met stapsgewijze voorbeelden en praktische tips.
De ObjectInputStream-klasse in het java.io-pakket stelt je in staat om objecten te deserialiseren die eerder geschreven zijn door ObjectOutputStream. Het breidt de abstracte InputStream-klasse uit.
Hoe ObjectInputStream werkt
Serialisatie transformeert Java-objecten naar een bytestream die opgeslagen of getransporteerd kan worden. Deserialisatie – het omgekeerde proces – wordt afgehandeld door ObjectInputStream, die de bytestream leest en de oorspronkelijke objecten herstelt.
Een ObjectInputStream aanmaken
Om een ObjectInputStream aan te maken, importeer eerst de klasse en koppel het aan een bron, meestal een FileInputStream:
// Koppel aan een bestand
FileInputStream fileStream = new FileInputStream("voorbeeld.dat");
// Wrap het in een ObjectInputStream
ObjectInputStream objStream = new ObjectInputStream(fileStream);
Eenmaal geïnstantieerd kan objStream elke geserialiseerde objecten uit het bestand lezen.
Kernmethoden van ObjectInputStream
Hieronder de meest gebruikte methoden:
read()– leest een enkele bytereadBoolean()– leest een boolean-waardereadChar()– leest een karakterreadInt()– leest een integerreadObject()– herstelt een object uit de stream
Voorbeeld 1: Basisdeserialisatie
Hieronder een minimaal voorbeeld dat een integer en een string naar een bestand schrijft, en ze daarna terugleest.
import java.io.*;
public class Main {
public static void main(String[] args) {
int data1 = 5;
String data2 = "Dit is programiz";
try {
// Data schrijven
FileOutputStream fos = new FileOutputStream("bestand.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(data1);
oos.writeObject(data2);
// Data lezen
FileInputStream fis = new FileInputStream("bestand.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("Integer data: " + ois.readInt());
System.out.println("String data: " + ois.readObject());
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output
Integer data: 5 String data: Dit is programiz
Voorbeeld 2: Een aangepast object deserialiseren
Serialiseer en deserialiseer een simpel Hond-object. Onthoud, de klasse moet Serializable implementeren om te werken.
import java.io.*;
class Hond implements Serializable {
String naam;
String ras;
Hond(String naam, String ras) {
this.naam = naam;
this.ras = ras;
}
}
public class Main {
public static void main(String[] args) {
Hond hond = new Hond("Tyson", "Labrador");
try {
// Serialiseren
FileOutputStream fos = new FileOutputStream("bestand.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(hond);
// Deserialiseren
FileInputStream fis = new FileInputStream("bestand.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Hond nieuweHond = (Hond) ois.readObject();
System.out.println("Hond naam: " + nieuweHond.naam);
System.out.println("Hond ras: " + nieuweHond.ras);
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output
Hond naam: Tyson Hond ras: Labrador
Belangrijkste punten:
- Gebruik
ObjectOutputStreamom objecten te schrijven - Gebruik
ObjectInputStreamom ze terug te lezen - Alleen objecten die
Serializableimplementeren kunnen geserialiseerd worden
Extra ObjectInputStream-methoden
| Methode | Beschrijving |
|---|---|
available() | Retourneert het aantal bytes dat gelezen kan worden zonder te blokkeren |
mark() | Markeert de huidige positie in de stream |
reset() | Zet de stream terug naar de meest recente markering |
skipBytes(int n) | Slaat n bytes over |
close() | Sluit de stream en geeft bronnen vrij |
Voor dieper inzicht, bezoek de officiële Java-documentatie.
Java
- Java's final-sleutelwoord begrijpen: variabelen, methoden en klassen
- Java instanceof operator: een uitgebreide gids
- Java-erfenis meesteren: concepten, typen en praktische voorbeelden
- Java geneste static classes begrijpen: gebruik, verschillen en voorbeelden
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Singleton patroon uitgelegd: hoe veilig te implementeren en gebruiken
- Java Reflectie meesteren: klassen, methoden en velden inspecteren tijdens runtime
- Java ArrayList meesteren: operaties, methoden en best practices
- Java ObjectOutputStream: Serialisatie, methoden en praktische voorbeelden
- Java Generics: Herbruikbare, type-veilige code bouwen
- Java-bestandsbewerkingen onder de knie krijgen met java.io – Aanmaken, lezen, schrijven en verwijderen