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.
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.
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.
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.
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.
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.