ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IO_对象流

2022-08-29 22:05:09  阅读:151  来源: 互联网

标签:java IO 对象 oos new 序列化 ois


对象流

  对象的本质是用来组织和存储数据的,对象本身也是数据。那么,能不能将对象存储到硬盘上的文件中呢?能不能将对象通过网络传输到另一个电脑呢?我们可以通过序列化和反序列化实现。

java对象的序列化和反序列化

	当两个进程远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会议二进制的序列的形式在网络中传送。比如,我们可以通过http协议发送字符串信息;我们也可以在网络上直接发送java对象。发送方需要把这个java对象转换为字节序列化,才能在网络上传送;接收方则需要把字节序列恢复为java对象才能正常读取。
	把java对象转换为字节序列的过程为**对象的序列化**。字节序列话恢复为java对象的过程称为**对象的反序列化**。

** 对象序列化的作用有如下两种:**

  • 持久化 把对象的字节序列化永久的保存在硬盘上,通常存放在一个文件中
  • 网络通信 在网络上传送对象的字节序列。比如:服务器之间的数据通信/对象传递。

序列化涉及到的类和接口

	ObjectOutputStream代表对象输出流,它的writeObject(Object object)方法可对参数指定的obj对象进行序列化,把得到的字节序列化写到一个目标输出流中。
	ObjectInputStream 代表对象输入流,他的readObject()方法从一个源输入流中读取字节序列,再把他们反序列话一个对象,并将其返回。
	只有实现了Serializable接口的类的对昂才能被序列化。Serializable接口是一个空接口,只起到标记作用

对象流_写出基本的数据类型

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/29/20:32
 * @Version
 * @Description 对象流_写出基本的数据类型
 */
public class ObjectOutputStreamBasicTypeDemo {

    public static void main(String[] args) {
        ObjectOutputStreamBasicTypeDemo oosbt = new ObjectOutputStreamBasicTypeDemo();
        oosbt.objectOutputStream("D:\\IOTest\\ma.txt");
    }

    /**
    * @Description: 写出基本的数据类型
    * @Param: [str]
    * @return: void
    * @Author: Mxhlin
    * @Date: 2022/8/29
    */
    public void objectOutputStream(String str){
        ObjectOutputStream oos = null;
        try {
                oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(str)));
                oos.writeInt(12);
                oos.writeChar('a');
                oos.writeBoolean(false);
                oos.writeDouble(12.0);
                oos.writeUTF("你好啊");// String 类型
                oos.flush();
        }catch (Exception e){
            e.fillInStackTrace();
        }finally {
            try {
                if (oos != null){
                    oos.close();
                }
            }catch (Exception e){
                e.fillInStackTrace();
            }
        }
    }
}

运行结果

在这里插入图片描述

对象流_读出基本的数据类型

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/29/20:47
 * @Version
 * @Description 对象流_读取基本的数据类型
 */
public class ObjectInputSteamBasicTypeDemo {

    public static void main(String[] args) {
        ObjectInputSteamBasicTypeDemo oisbtd = new ObjectInputSteamBasicTypeDemo();
        oisbtd.objectInputStream("D:\\IOTest\\ma.txt");
    }

    /**
    * @Description: 读取基本的数据类型
    * @Param: [ste]
    * @return: void
    * @Author: Mxhlin
    * @Date: 2022/8/29
    */
    public void objectInputStream(String ste){
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(ste)));
            System.out.println("Int: "+ois.readInt());
            System.out.println("Char: "+ois.readChar());
            System.out.println("Boolean: "+ois.readBoolean());
            System.out.println("Double: "+ois.readDouble());
            System.out.println("String: "+ois.readUTF());
        }catch (Exception e){
            e.fillInStackTrace();
        }finally {
            try {
                if (ois != null){
                    ois.close();
                }
            }catch (Exception e){
                e.fillInStackTrace();
            }
        }
    }
}

在这里插入图片描述

对象流_将对象序列化到文件

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/29/21:22
 * @Version
 * @Description 对象流_将对象序列化到文件
 */
public class ObjectOutputStreamObjectDemo {

    public static void main(String[] args) {
        ObjectOutputStreamObjectDemo oosod = new ObjectOutputStreamObjectDemo();
        oosod.objectOutputStream("D:\\IOTest\\木木.txt");
    }

    /**
    * @Description: 将对象序列化到文件
    * @Param: [str]
    * @return: void
    * @Author: Mxhlin
    * @Date: 2022/8/29
    */
    public void objectOutputStream(String str){
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream(str));
            User user = new User(1,"木木","18");
            oos.writeObject(user);
            oos.flush();
        }catch (Exception e){
            e.fillInStackTrace();
        }finally {
            try {
                if (oos != null){
                    oos.close();
                }
            }catch (Exception e){
                e.fillInStackTrace();
            }
        }
    }
}

运行结果
在这里插入图片描述

对象流_将对象反序列化内存

import java.io.FileInputStream;
import java.io.ObjectInputStream;

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/08/29/21:38
 * @Version
 * @Description 对象流_将对象反序列化内存
 */
public class ObjectInputStreamObjectTpeyDemo {

    public static void main(String[] args) {
        ObjectInputStreamObjectTpeyDemo ooo = new ObjectInputStreamObjectTpeyDemo();
        ooo.ObjectInputStream("D:\\IOTest\\木木.txt");
    }

    /**
    * @Description: 将对象反序列化内存
    * @Param: [str]
    * @return: void
    * @Author: Mxhlin
    * @Date: 2022/8/29
    */
    public void ObjectInputStream(String str){
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream(str));
            User user = (User)ois.readObject();
            System.out.println(user.getUserId());
            System.out.println(user.getUserName());
            System.out.println(user.getUserAge());
        }catch (Exception e){
            e.fillInStackTrace();
        }finally {
            try {
                if (ois != null){
                    ois.close();
                }
            }catch (Exception e){
                e.fillInStackTrace();
            }
        }
    }
}

运行结果

在这里插入图片描述

标签:java,IO,对象,oos,new,序列化,ois
来源: https://www.cnblogs.com/xhlin/p/16637538.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有