Angenommen, ich habe eine serialisierbare Klasse AppMessage
.
Ich möchte es als byte[]
Over-Socket an eine andere Maschine senden, wo es aus den empfangenen Bytes neu aufgebaut wird.
Wie könnte ich das erreichen?
java
object
serialization
iTEgg
quelle
quelle
byte[]
? Warum nicht einfach mit direkt in die Steckdose schreibenObjectOutputStream
und mit lesenObjectInputStream
?new ObjectMapper().writeValueAsBytes(JAVA_OBJECT_HERE)
Antworten:
Bereiten Sie das zu sendende Byte-Array vor:
Erstellen Sie ein Objekt aus einem Byte-Array:
quelle
ObjectInput
,ObjectOuput
,ByteArrayOutputStream
UndByteArrayInputStream
alle implementierenAutoCloseable
Schnittstelle, wäre es nicht gut , die Praxis umgesetzt werden , es zu benutzen, damit sie nicht versehentlich fehlt schließen? (Ich bin mir nicht ganz sicher, ob dies die beste Vorgehensweise ist. Deshalb frage ich mich.) Beispiel :try(ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(bos)){ /*Do stuff*/ }catch(IOException e){/*suppress exception*/}
. Es beseitigt auch die Notwendigkeit derfinal
Klausel und ihrer zusätzlichentry-catch
.Der beste Weg, dies zu tun, ist die Verwendung
SerializationUtils
von Apache Commons Lang .So serialisieren Sie:
Deserialisieren:
Wie bereits erwähnt, ist hierfür die Commons Lang-Bibliothek erforderlich. Es kann mit Gradle importiert werden:
Maven:
Glasdatei
Und weitere hier erwähnte Möglichkeiten
Alternativ kann die gesamte Sammlung importiert werden. Verweisen Sie auf diesen Link
quelle
Wenn Sie Java> = 7 verwenden, können Sie die akzeptierte Lösung mithilfe von try with resources verbessern :
Und umgekehrt:
quelle
Kann von SerializationUtils , von der Serialize & Deserialize-Methode von ApacheUtils durchgeführt werden, um ein Objekt in Byte [] zu konvertieren und umgekehrt, wie in der Antwort von @uris angegeben.
So konvertieren Sie ein Objekt durch Serialisierung in Byte []:
Um Byte [] durch Deserialisieren in ein Objekt umzuwandeln ::
Klicken Sie auf den Link, um org-apache-commons-lang.jar herunterzuladen
Integrieren Sie die JAR-Datei, indem Sie auf Folgendes klicken:
Dateiname -> Medule-Einstellungen öffnen -> Modul auswählen -> Abhängigkeiten -> Jar-Datei hinzufügen und fertig.
Hoffe das hilft .
quelle
Ich empfehle auch, das SerializationUtils-Tool zu verwenden. Ich möchte einen falschen Kommentar von @Abilash korrigieren. Die
SerializationUtils.serialize()
Methode ist entgegen einer anderen Antwort hier nicht auf 1024 Bytes beschränkt.Auf den ersten Blick , denken Sie vielleicht, dass dies
new ByteArrayOutputStream(1024)
nur eine feste Größe zulässt. Wenn Sie sich das genauer ansehenByteArrayOutputStream
, werden Sie feststellen, dass der Stream bei Bedarf wächst:quelle
quelle
Eine andere interessante Methode ist von
com.fasterxml.jackson.databind.ObjectMapper
byte[] data = new ObjectMapper().writeValueAsBytes(JAVA_OBJECT_HERE)
Maven-Abhängigkeit
quelle
Frühlingsrahmen
org.springframework.util.SerializationUtils
quelle
Wenn Sie Feder verwenden, gibt es eine Util-Klasse in Spring-Core. Sie können einfach tun
quelle
Codebeispiel mit Java 8+:
quelle
Für den Fall, dass Sie eine nette Lösung zum Kopieren und Einfügen ohne Abhängigkeiten wünschen. Holen Sie sich den Code unten.
Beispiel
Quelle
quelle
Dies ist nur eine optimierte Codeform der akzeptierten Antwort, falls jemand dies in der Produktion verwenden möchte:
quelle