Java 保存對象到本地

將對象保存在本地第一時間一般想到的都是ObjectOutput,但是我在網上無意中發現還可以將對象轉爲json字符串來保存,嘿,都點燈下黑了,一直在用json傳輸數據一時之間竟然沒想到,我們在保存對象時候有時候並不需要保存信息,有時候只需要保存對這個對象來說最關鍵的變量即可

總結:將對象保存到本地的兩種方法

1.保存成json字符串
2.ObjectOutputStream序列化到本地

需要注意的是在使用 序列化對象的時候,該對象需要實現Serializable接口

    public static void saveObjectByObjectOutput(Object o, File file) {
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));
            objectOutputStream.writeObject(o);
            objectOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Object getObjectByObjectInput(File file) {
        try {
            ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file));
            Object o = inputStream.readObject();
            inputStream.close();
            return o;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void saveObjectByJson(File file, Object o) {
        String json = new Gson().toJson(o);
        try {
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write(json.getBytes());
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Object getObjectByJson(File file, Class c) {
        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            StringBuilder stringBuilder = new StringBuilder();
            int l = 0;
            byte[] bs = new byte[1024];
            while ((l = fileInputStream.read(bs)) != -1) {
                stringBuilder.append(new String(bs, 0, l));
            }
            fileInputStream.close();
            return new Gson().fromJson(stringBuilder.toString(), c);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

另外送上Object和String互轉的方法:

    public static String ObjectToString(Object o) {
        try {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
            objectOutputStream.writeObject(o);
            objectOutputStream.close();
            byteArrayOutputStream.close();
            return new BASE64Encoder().encode(byteArrayOutputStream.toByteArray());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Object StringToObject(String str) {
        try {
            byte[] bs = new BASE64Decoder().decodeBuffer(str);

            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bs);
            ObjectInputStream inputStream = new ObjectInputStream(byteArrayInputStream);
            Object o = inputStream.readObject();
            inputStream.close();
            byteArrayInputStream.close();
            return o;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章