Gyakorló feladat

A feladat megoldása során olyan osztályokat fogunk készíteni, amivel Java objektumokat tárolhatunk el bájtsorozatokként illetve példányosíthatjuk őket bájtsorozatokból.

serializers.Serializer

Készítsünk egy Serializer interfészt, melynek egy típusparamétere legyen. Két függvénye a serialize és deserialize legyen. Az előbbi egy a típusparaméternek megfelelő objektumot és egy OutputStream-et kap, a másik pedig egy InputStream-et és egy objektumot ad vissza.

serializers.BigIntegerSerializer

Készítsük el a tetszőleges pontosságú számok szerializálására használható osztályt. Példányosítsa a Serializer interfészt a BigInteger típusparaméterrel. A BigInteger számokat alkotó bájtokat a getBytes() függvény segítségével kérdezhetjük le. Azonban ez tetszőlegesen hosszú lehet, ezért azt is el kell tárolni, hogy hány bájtot írunk ki, beolvasáskor pedig ez alapján döntjük el, hogy mennyit olvasunk vissza.

serializers.ReflectionSerializer

Készítsünk egy általános szerializáló osztályt, ami reflection segítségével tetszőleges objektumot tud json formátumra alakítani. Egyelőre még ne implementáljuk le a működését.

serializers.SelectiveSerializer

Csináljunk egy SelectiveSerializer osztályt, ami példányosítja a Serializer interfészt tetszőleges Java objektumra. Ennek a viselkedése a következő legyen: Ha a kapott objektum BigInteger, akkor a BigIntegerSerializer osztályt használja. Ellenkező esetben a ReflectionSerializer osztályt használja.

serializers.ReflectionSerialize

Fejezzük be a ReflectionSerializer osztály működését. A serialize művelet nézze végig az objektum mezőit. Írja ki az egyes mezők értékeit a SelectiveSerializer használatával. Csak a nem-statikus mezőket írjuk ki, de működjön a privát mezőkre is. A deserialize példányosítsa az objektumot majd az osztály mezőit egyenként olvassa be a stream-ről és adja értékül a mezőknek az objektumban.