import com.sun.istack.internal.Nullable; import java.io.*; import java.lang.reflect.Field; public class MySerializer { private MySerializer() {} public static void saveToFile(String filePath, MySerializable mySerializable) throws IOException { FileOutputStream fileOutputStream = new FileOutputStream(new File(filePath)); fileOutputStream.write(mySerializable.getBytes()); fileOutputStream.flush(); fileOutputStream.close(); } public @Nullable static T restoreFromFile(String filepath, Class cls) throws IOException { try (FileInputStream fis = new FileInputStream(filepath); DataInputStream dataInputStream = new DataInputStream(fis)) { T object = cls.newInstance(); for (Field field : cls.getDeclaredFields()) { if (field.isAnnotationPresent(Save.class)) { byte type = dataInputStream.readByte(); // TODO if type != -1 MySerializable.Primitive primitive = MySerializable.Primitive.values()[type]; Object value; switch (primitive) { case INT: value = dataInputStream.readInt(); break; case CHAR: value = dataInputStream.readChar(); break; // TODO complete switch for all primitive types default: value = null; } field.set(object, value); } } return object; } catch (IOException e) { throw e; } catch (Exception e) { e.printStackTrace(); return null; } } }