zoukankan      html  css  js  c++  java
  • ObjectInputStream&ObjectOutputStream工具类

    序列化:将数据保存到文件;ObjectOutputStream;
    反序列化:将文件中的数据显示出来;ObjectInputStream;
     
    在反序列化程序中运行后能够正常输出Person的相关信息,但是在目录下的文件“person.obj”用文本编辑器打开之后却是乱码的。这是为什么呢?是不是因为写出去的编码和文本编辑器的默认编码采用了不一样的字符集?然后我们就开始想怎么能够将二者的编码格式设为一致的。
    其实,这么想一开始就是错误的。为什么这么说呢,因为序列化和反序列化都是基于二进制流的,也就是说,在第二步中,其实就是将person的相关信息转化为二进制存储在了person.obj这个文件中,那么用文本编辑器打开查看的话当然是会出现乱码的。只有通过反序列化才能将存储的二进制读取出来,然后正常显示在控制台上。
    package com.util;
    
    import com.bean.*;
    
    import java.util.*;
    import java.io.*;
    
    public class StudentUtil {
        /**
         * 从文件中获取Student集合对象List
         * */
        public static List<Student> fileToLst() {
            List<Student> lsst = null;
    
            // 获取存放学生集合的文件对象
            File file = new File("stu.bin");
    
            try {
                if (file.exists()) {
                    // 创建文件输入流对象
                    FileInputStream fin = new FileInputStream(file);
    
                    // 创建缓冲区输入流对象
                    BufferedInputStream bin = new BufferedInputStream(fin);
    
                    // 创建对象输入流
                    ObjectInputStream oin = new ObjectInputStream(bin);
    
                    // 从对象输入流中获取学生的集合对象
                    lsst = (List<Student>) oin.readObject();
                    oin.close();
                    return lsst;
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return lsst;
        }
    
        /**
         * 向文件中存放学生的集合对象
         * */
        public static boolean listToFile(ArrayList<Student> lsst) {
            // 创建文件对象,指定文件存放的路径
            File file = new File("stu.bin");
            // 集合中有元素存在,向文件中写入数据
            if (lsst != null && !lsst.isEmpty()) {
                try {
                    FileOutputStream fout = new FileOutputStream(file);
    
                    // 创建缓冲区输出流对象
                    BufferedOutputStream bout = new BufferedOutputStream(fout);
    
                    // 创建对象输出流
                    ObjectOutputStream obout = new ObjectOutputStream(bout);
    
                    obout.writeObject(lsst);
    
                    obout.flush();
                    obout.close();
                    return true;
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return false;
        }
    }
  • 相关阅读:
    windows下的tfjs-node安装异常总结
    微信小游戏广告位iphonex底部适配问题
    JS做深度学习3——数据结构
    JS做深度学习2——导入训练模型
    ASP.NET MVC4网站搭建与发布【最新】
    JS做深度学习1——偶然发现与入门
    聊聊H5与JS近几年的黑科技
    Mysql中让两个字段不同时相同的方法
    JUnit4在Eclipse中的使用
    编写DAO,通过JdbcTemplate操作数据库的实践
  • 原文地址:https://www.cnblogs.com/xh_Blog/p/6598444.html
Copyright © 2011-2022 走看看