栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

以二进制格式保存加载java对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

以二进制格式保存加载java对象

目标
  • 以二进制格式保存java对象为文件
  • 加载保存的二进制文件,转为需要的对象
代码片段 模型类
  • 年级 Grade.java
package com.xzbd.demo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.io.Serializable;


@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Grade implements Serializable {
    private String name;
    private String level;
}


  • 学校 School.java
package com.xzbd.demo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.io.Serializable;
import java.util.List;


@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class School implements Serializable {
    private String name;
    private String address;
    private List gradeList;
}

  • 工具类 IOUtil.java
package com.xzbd.demo;

import java.io.*;
import java.util.Objects;


public class IOUtil {

    
    public static void saveBinaryFileFromObject(String fullPath, Object obj) {
        ByteArrayOutputStream bos = null;
        ObjectOutputStream oos = null;
        try {
            bos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(bos);
            // 读取对象并转换成二进制数据
            oos.writeObject(obj);
            oos.flush();
            File destFile = new File(fullPath);
            if(!destFile.exists()){
                destFile.createNewFile();
            }
            bos.writeTo(new FileOutputStream(destFile));
            bos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    
    public static  T loadModelFromFile(String fileName, Class tClazz) {
        try {
            File file = new File(fileName);
            InputStream inStream = new FileInputStream(file);
            return loadModelFromStream(inStream, tClazz);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    
    public static  T loadModelFromStream(InputStream inStream, Class tClazz) {
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(inStream);
            Object obj = ois.readObject();
            if (obj.getClass() == tClazz) {
                return (T) obj;
            } else {
                System.out.println("######### 加载文件转对象失败 #########");
                System.out.println("系统加载到的文件是:" + obj.getClass() + " 对象");
                System.out.println("您希望的对象是:" + tClazz + " 对象");
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            if (Objects.nonNull(ois)) {
                try {
                    ois.close();
                    inStream.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }
    }
}

  • 测试类 Test.java
package com.xzbd.demo;

import java.util.ArrayList;
import java.util.List;


public class Test {

    public static void main(String[] args) {
        Grade grade1 = new Grade("一年级","1");
        Grade grade2 = new Grade("二年级","2");
        Grade grade3 = new Grade("三年级","3");
        Grade grade4 = new Grade("四年级","4");

        List gradeList = new ArrayList<>();
        gradeList.add(grade1);
        gradeList.add(grade2);
        gradeList.add(grade3);


        List gradeList2 = new ArrayList<>();
        gradeList2.add(grade2);
        gradeList2.add(grade3);
        gradeList2.add(grade4);

        School school = new School("小学","小学的地址",gradeList);
        School school2 = new School("大学","大学的地址",gradeList2);


        String file1 = "D:\z_tmp_data/school1";
        String file2 = "D:\z_tmp_data/school2";
        IOUtil.saveBinaryFileFromObject(file1,school);
        IOUtil.saveBinaryFileFromObject(file2,school2);

        School loadModelFromFile = IOUtil.loadModelFromFile(file1, School.class);
        School loadModelFromFile2 = IOUtil.loadModelFromFile(file2, School.class);

        System.out.println(loadModelFromFile.toString());
        System.out.println(loadModelFromFile2.toString());

    }
}

运行结果
  • 输出的文件

  • 加载回的数据,打印

用到的工具类
  • lombok
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351350.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号