Ja, die letzte Zeile ist eine Cast-Anweisung. Casting ist mit Kosten verbunden, ist aber im Vergleich zu den Kosten der Serialisierung unbedeutend. Ich bezweifle, dass es sogar auf einem Profiler auftauchen würde.
Denken Sie daran, was Serialisierung beinhaltet.
- Verarbeitung eines Bytedatenstream
- Erstellen von Typen auf Basis von Metadaten-Informationen
- Konvertierung zwischen Byte-Arrays und Datentypen
Jede dieser Operationen sind deutlich teurer als ein Guss Betrieb.
EDIT Warum es Gießen überhaupt benötigt.
Es gibt ein paar Gründe hier. Der erste besteht darin, dass die Deserialisierungs-APIs keine Möglichkeit haben, den Typ des Byte-Streams zu kennen, bevor dieser inspiziert wird. Die einzige Option, die die API in Bezug auf einen Rückgabetyp in Metadaten hat, ist Objekt.
Zweitens muss Deserialisierung buchstäblich jeden Typ unterstützen, der serialisierbar ist. Um zu funktionieren, muss es einen Rückgabetyp für die Methode auswählen, der für alle Typen gilt, die serialisiert werden können. Der einzige verfügbare Typ ist das Objekt.
Danke Jared. Der Grund, warum ich mich gefragt habe, ist, weil ich die Serialisierung für mein gespeichertes Dateisystem in meiner App verwenden möchte, aber die Dateien könnten Millionen von Objekten enthalten. Weißt du, warum es eine Besetzung erfordert? dh. Warum ist es nicht sicher? –
@Joan erfordert eine Umwandlung, da die Deserialisierungsengine den Typ nicht kennt, bevor die zugrunde liegenden Daten gelesen werden. Außerdem gab es die API schon vor Generics, weshalb sie gezwungen wurde, das Objekt als Typ zurückzugeben. – JaredPar
Danke Jared, gut zu wissen. Ist es also möglich, einen Serializer zu haben, der den Typ ohne Casting zurückgibt? –