Zuerst die Grundlagen
Byte-Stream - Stream ist eine Folge von Daten. Input Stream - liest Daten von der Quelle. Output Stream - schreibt Daten an das Ziel. Java Byte Streams werden für die byteweise Eingabe/Ausgabe (8 Bits auf einmal) verwendet. Ein Byte Stream eignet sich für die Verarbeitung von Rohdaten wie Binärdateien. Java Character Streams werden für die Eingabe/Ausgabe von 2 Bytes auf einmal verwendet, da Zeichen in Java unter Verwendung der Unicode-Konventionen mit 2 Bytes für jedes Zeichen gespeichert werden. Zeichenströme sind nützlich, wenn wir Textdateien verarbeiten (lesen/schreiben).
RMI (Remote Method Invocation) - eine API, die einen Mechanismus zur Erstellung verteilter Anwendungen in Java bietet. RMI ermöglicht es einem Objekt, Methoden eines Objekts aufzurufen, das in einer anderen JVM läuft.
Beide Serialisierung y rangieren. werden lose als Synonyme verwendet. Hier sind einige Unterschiede.
Serialisierung - Datenelemente eines Objekts werden in binärer Form oder als Byte Stream geschrieben (und können dann in eine Datei/Speicher/Datenbank usw. geschrieben werden). Sobald die Datenelemente eines Objekts in die Binärform geschrieben sind, können keine Informationen über die Datentypen mehr gespeichert werden.
rangieren. - Das Objekt wird serialisiert (in einen Byte-Stream im Binärformat) mit angehängtem Datentyp + Codebase und dann übergeben Entferntes Objekt (RMI) . Durch Marshalling wird der Datentyp in eine vorgegebene Namenskonvention umgewandelt, so dass er in Bezug auf den ursprünglichen Datentyp rekonstruiert werden kann.
Die Serialisierung ist also ein Teil des Marshalling.
CodeBase ist eine Information, die dem Empfänger von Object mitteilt, wo die Implementierung dieses Objekts zu finden ist. Jedes Programm, das ein Objekt an ein anderes Programm weitergeben möchte, das es noch nicht kennt, muss die Codebase angeben, damit der Empfänger weiß, wo er den Code herunterladen kann, falls er ihn nicht lokal zur Verfügung hat. Der Empfänger wird bei der Deserialisierung des Objekts die Codebase abrufen und den Code von diesem Ort laden. (Kopiert aus der Antwort von @Nasir)
Serialisierung ist fast wie ein dummer Speicherauszug des von dem/den Objekt(en) verwendeten Speichers, während rangieren. speichert Informationen über benutzerdefinierte Datentypen.
In gewisser Weise führt die Serialisierung das Marshalling mit der Implementierung von Pass-by-Value durch, da keine Informationen über den Datentyp übergeben werden, sondern nur die primitive Form an den Byte-Stream übergeben wird.
Bei der Serialisierung kann es zu Problemen mit Big-Endian und Small-Endian kommen, wenn der Datenstrom von einem Betriebssystem zu einem anderen übertragen wird und die verschiedenen Betriebssysteme die gleichen Daten auf unterschiedliche Weise darstellen. Andererseits ist das Marshalling durchaus geeignet, um zwischen Betriebssystemen zu migrieren, da das Ergebnis eine Darstellung auf höherer Ebene ist.