Java >> Java tutorial >  >> Tag >> byte

Konverter et objekt til et byte-array i Java

1. Oversigt

I denne korte vejledning lærer vi, hvordan du konverterer et Java-objekt til et byte-array og omvendt .

2. Brug almindelig Java

Antag for eksempel, at vi har en Bruger klasse:

public class User implements Serializable {
    private String name;

    @Override
    public String toString() {
        return "User{name=" + name +  "}";
    }

    // getters and setters
}

Vi kan bruge en ByteArrayOutputStream og ObjectOutputStream objekt til at serialisere et objekt til et byte-array.

Lad os ikke glemme at bruge prøv-med-ressourcer, så vi ikke behøver at bekymre os om at lukke streams:

User user = new User();
user.setName("Josh");
try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     ObjectOutputStream oos = new ObjectOutputStream(bos)) {
    oos.writeObject(user);
}

Så bruger vi ByteArrayInputStream og ObjectInputStream at deserialisere vores modtagne byte-array til et objekt, før det endelig castes til Bruger :

try (ByteArrayInputStream bis = new ByteArrayInputStream(data);
     ObjectInputStream ois = new ObjectInputStream(bis)) {
    User deserializedUser = (User) ois.readObject();
    System.out.println(deserializedUser);
}

Bemærk, at vores Bruger klasse skal implementere Serialiserbar grænseflade . Ellers vil ovenstående kode kaste en NotSerializableException .

3. Brug Apache Commons Lang

Vi kan bruge SerializationUtils klasse fra Apache Commons Lang-biblioteket for at opnå det samme mål.

Denne klasse har en metode ved navn serialize() , som bruges til at serialisere et objekt til et byte-array:

byte[] data = SerializationUtils.serialize(user);

Og en deserialize() metode til at deserialisere byte-array til objekt:

User deserializedUser = SerializationUtils.deserialize(data);

Ovenstående metoder har parametre af typen Serialiserbar. Så vores Bruger klasse skal stadig implementere Serialiserbar interface, ligesom det gjorde i vores almindelige Java-eksempel.

4. Brug SerializationUtils Klasse af Spring Framework

Endelig, hvis vores projekt allerede bruger Spring Framework, kan vi bruge SerializationUtils klasse fra org.springframework.util pakke. Metodenavnene er de samme som dem i Apache Commons Lang-biblioteket.

Først kan vi serialisere vores Bruger objekt til en byte-array:

byte[] data = SerializationUtils.serialize(user);

Og vi kan deserialisere resultatet tilbage til en Bruger objekt:

User deserializedUser = SerializationUtils.deserialize(data);

Som sædvanligt er vores Bruger klasse skal implementere Serialiserbar grænseflade eller vi får en NotSerializableException når vi kører ovenstående kode.

5. Konklusion

Sammenfattende har vi lært tre forskellige måder at konvertere et Java-objekt til et byte-array og omvendt . Alle disse metoder kræver, at inputobjektet implementerer den Serialiserbare grænseflade for at få arbejdet gjort.


Java tag