Created
April 3, 2019 15:08
-
-
Save MohammadSamandari/c6532f571b583e4f18031a7e5f68079e to your computer and use it in GitHub Desktop.
Serialize and Deserialize Objects for saving into shared preferences.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import java.io.ByteArrayInputStream; | |
| import java.io.ByteArrayOutputStream; | |
| import java.io.IOException; | |
| import java.io.ObjectInputStream; | |
| import java.io.ObjectOutputStream; | |
| import java.io.Serializable; | |
| public class ObjectSerializer { | |
| public static String serialize(Serializable obj) throws IOException { | |
| if (obj == null) return ""; | |
| try { | |
| ByteArrayOutputStream serialObj = new ByteArrayOutputStream(); | |
| ObjectOutputStream objStream = new ObjectOutputStream(serialObj); | |
| objStream.writeObject(obj); | |
| objStream.close(); | |
| return encodeBytes(serialObj.toByteArray()); | |
| } catch (Exception e) { | |
| throw new RuntimeException(e); | |
| } | |
| } | |
| public static Object deserialize(String str) throws IOException { | |
| if (str == null || str.length() == 0) return null; | |
| try { | |
| ByteArrayInputStream serialObj = new ByteArrayInputStream(decodeBytes(str)); | |
| ObjectInputStream objStream = new ObjectInputStream(serialObj); | |
| return objStream.readObject(); | |
| } catch (Exception e) { | |
| throw new RuntimeException(e); | |
| } | |
| } | |
| public static String encodeBytes(byte[] bytes) { | |
| StringBuffer strBuf = new StringBuffer(); | |
| for (int i = 0; i < bytes.length; i++) { | |
| strBuf.append((char) (((bytes[i] >> 4) & 0xF) + ((int) 'a'))); | |
| strBuf.append((char) (((bytes[i]) & 0xF) + ((int) 'a'))); | |
| } | |
| return strBuf.toString(); | |
| } | |
| public static byte[] decodeBytes(String str) { | |
| byte[] bytes = new byte[str.length() / 2]; | |
| for (int i = 0; i < str.length(); i+=2) { | |
| char c = str.charAt(i); | |
| bytes[i/2] = (byte) ((c - 'a') << 4); | |
| c = str.charAt(i+1); | |
| bytes[i/2] += (c - 'a'); | |
| } | |
| return bytes; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment