zoukankan      html  css  js  c++  java
  • 【Java】Java原生的序列化和反序列化

    写一个Java原生的序列化和反序列化的DEMO。

    需序列化的类:

    package com.nicchagil.nativeserialize;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        private Integer id;
        private String userName;
        
        public User(Integer id, String userName) {
            super();
            this.id = id;
            this.userName = userName;
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public static long getSerialversionuid() {
            return serialVersionUID;
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((id == null) ? 0 : id.hashCode());
            result = prime * result
                    + ((userName == null) ? 0 : userName.hashCode());
            return result;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            User other = (User) obj;
            if (id == null) {
                if (other.id != null)
                    return false;
            } else if (!id.equals(other.id))
                return false;
            if (userName == null) {
                if (other.userName != null)
                    return false;
            } else if (!userName.equals(other.userName))
                return false;
            return true;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", userName=" + userName + "]";
        }
    
    }
    View Code

    工具类:

    package com.nicchagil.nativeserialize;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    
    public class NativeSerializeTools {
    
        /**
         * 序列化
         * @param filePath 序列化的路径
         * @param s 序列化的对象
         */
        public static void write(String filePath, Serializable s) throws FileNotFoundException, IOException {
            if (filePath == null || filePath.length() == 0) {
                throw new RuntimeException("请传入序列化路径");
            }
            
            if (s == null) {
                throw new RuntimeException("请传入序列化对象");
            }
            
            File f = new File(filePath);
            
            ObjectOutputStream oos = null;
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(f);
                oos = new ObjectOutputStream(fos);
                oos.writeObject(s);
                System.out.println("finish.");
            } finally {
                if (oos != null) {
                    oos.close();
                }
                if (fos != null) {
                    fos.close();
                }
                System.out.println("close the resource.");
            }
        }
        
        /**
         * 反序列化
         * @param filePath 反序列化的路径
         * @return 反序列化的对象
         */
        public static Object read(String filePath) throws ClassNotFoundException, FileNotFoundException, IOException {
            if (filePath == null || filePath.length() == 0) {
                throw new RuntimeException("请传入反序列化路径");
            }
            
            File f = new File(filePath);
            
            ObjectInputStream ois = null;
            FileInputStream fis = null;
            Object o = null;
            try {
                fis = new FileInputStream(f);
                ois = new ObjectInputStream(fis);
                o = ois.readObject();
                System.out.println("finish.");
            } finally {
                if (ois != null) {
                    ois.close();
                }
                if (fis != null) {
                    fis.close();
                }
                System.out.println("close the resource.");
            }
            
            return o;
        }
    
    }
    View Code

    测试类:

    package com.nicchagil.nativeserialize;
    
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    import org.junit.Assert;
    import org.junit.Test;
    
    public class HowToUse {
        
        private User user = new User(100, "Nick Huang");
        private String filePath = "d:/user.txt";
        
        @Test
        public void c1() throws FileNotFoundException, IOException {
            NativeSerializeTools.write(filePath, user);
        }
        
        @Test
        public void c2() throws FileNotFoundException, IOException, ClassNotFoundException {
            Object o = NativeSerializeTools.read(filePath);
            
            System.out.println(o);
            Assert.assertTrue(user.equals(o));
        }
    
    }
    View Code

    日志:

    finish.
    close the resource.
    finish.
    close the resource.
    User [id=100, userName=Nick Huang]
    View Code
  • 相关阅读:
    深入理解Aspnet Core之Identity(1)
    vscode同步插件 sync(gist,token)
    括号匹配问题
    EI目录下载地址及保护密码
    极简单的方式序列化sqlalchemy结果集为JSON
    OpenCvSharp 通过特征点匹配图片
    HttpWebRequest提高效率之连接数,代理,自动跳转,gzip请求等设置问题
    子网掩码划分
    使用批处理复制并以时间规则重命名文件
    九步确定你的人生目标
  • 原文地址:https://www.cnblogs.com/nick-huang/p/5674785.html
Copyright © 2011-2022 走看看