Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java ObjectOutputStream: Serialisatie, methoden en praktische voorbeelden

Java ObjectOutputStream-klasse

Verkent de Java ObjectOutputStream API, de kernmethoden en stapsgewijze voorbeelden die demonstreren hoe je objecten naar bestanden serialiseert en ze terugleest.

Inleiding

De ObjectOutputStream-klasse uit het java.io-pakket laat je Java-objecten schrijven zodat ze later door ObjectInputStream gelezen kunnen worden. Het breidt OutputStream uit en is de ruggengraat van Java's ingebouwde serialisatiemechanisme.

Hoe ObjectOutputStream werkt

Wanneer je een object naar een ObjectOutputStream schrijft, codeert het framework de klassenaam, veldwaarden en type-informatie in een binair formaat – een proces bekend als serialisatie. De resulterende bytestream kan in een bestand opgeslagen, via een netwerk verzonden, of zelfs in geheugen ingebed worden.

Belangrijk: Alleen objecten die java.io.Serializable implementeren kunnen geserialiseerd worden. Deze interface fungeert als marker om de runtime te informeren dat een object veilig is om te persisteren of te transporteren.

Een ObjectOutputStream aanmaken

Begin met het importeren van de klasse:

import java.io.ObjectOutputStream;

Koppel het vervolgens aan een FileOutputStream of een andere onderliggende OutputStream:

// Schrijf naar een bestand genaamd "data.bin"
FileOutputStream fileStream = new FileOutputStream("data.bin");
ObjectOutputStream objStream = new ObjectOutputStream(fileStream);

Hier is objStream nu klaar om objecten te serialiseren in fileStream.

Kernmethoden van ObjectOutputStream

De klasse erft een suite methoden van OutputStream en voegt gespecialiseerde toe voor objectafhandeling:

  • write(int b) – schrijft een enkele byte
  • writeBoolean(boolean v) – schrijft een boolean-waarde
  • writeChar(int v) – schrijft een karakter
  • writeInt(int v) – schrijft een integer
  • writeObject(Object obj) – serialiseert het gegeven object

Voorbeeld 1: Primitieven en String-data serialiseren

Hieronder een compleet snippet dat een int en een String naar een bestand schrijft, en ze daarna terugleest met ObjectInputStream:

import java.io.*;

public class Main {
    public static void main(String[] args) {
        int data1 = 5;
        String data2 = "Dit is programiz";
        try {
            // Objecten schrijven
            FileOutputStream fos = new FileOutputStream("bestand.bin");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeInt(data1);
            oos.writeObject(data2);
            oos.close();
            // Objecten lezen
            FileInputStream fis = new FileInputStream("bestand.bin");
            ObjectInputStream ois = new ObjectInputStream(fis);
            System.out.println("Integer data: " + ois.readInt());
            System.out.println("String data: " + ois.readObject());
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output

Integer data: 5
String data: Dit is programiz

Voorbeeld 2: Een aangepast object serialiseren

Om een door de gebruiker gedefinieerde klasse te serialiseren, implementeer gewoon Serializable:

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 hond1 = new Hond("Tyson", "Labrador");
        try {
            // Het object schrijven
            FileOutputStream fos = new FileOutputStream("hond.bin");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(hond1);
            oos.close();
            // Het object lezen
            FileInputStream fis = new FileInputStream("hond.bin");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Hond nieuweHond = (Hond) ois.readObject();
            System.out.println("Hond naam: " + nieuweHond.naam);
            System.out.println("Hond ras: " + nieuweHond.ras);
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output

Hond naam: Tyson
Hond ras: Labrador

De Hond-klasse moet Serializable implementeren omdat ObjectOutputStream alleen serialiseerbare objecten kan schrijven.

Extra ObjectOutputStream-operaties

MethodeBeschrijving
flush()Schrijft gebufferde output-bytes naar de onderliggende stream
drain()Schrijft gebufferde data (beschikbaar in Java 9+)
close()Sluit de stream en geeft systeembronnen vrij

Voor een diepere duik, raadpleeg de officiële Java-documentatie.

Java

  1. Java's final-sleutelwoord begrijpen: variabelen, methoden en klassen
  2. Java instanceof operator: een uitgebreide gids
  3. Java-erfenis meesteren: concepten, typen en praktische voorbeelden
  4. Java geneste static classes begrijpen: gebruik, verschillen en voorbeelden
  5. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  6. Java Singleton patroon uitgelegd: hoe veilig te implementeren en gebruiken
  7. Java Reflectie meesteren: klassen, methoden en velden inspecteren tijdens runtime
  8. Java ArrayList meesteren: operaties, methoden en best practices
  9. Java Stack-klasse: Uitgebreide handleiding voor gebruik en methoden
  10. Java Generics: Herbruikbare, type-veilige code bouwen
  11. Java-bestandsbewerkingen onder de knie krijgen met java.io – Aanmaken, lezen, schrijven en verwijderen