A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

ObjectInputStream与ObjectOutputStream这两个类看了半天的视频也不明白,它具体是什么时候用,和其他流有什么区别?怎么去理解ObjectInputStream与ObjectOutputStream与其他流的关系?

6 个回复

倒序浏览
ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。
ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久性存储。ObjectInputStream 用于恢复那些以前序列化的对象。其他用途包括使用套接字流在主机之间传递对象,或者用于编组和解组远程通信系统中的实参和形参。
ObjectInputStream 确保从流创建的图形中所有对象的类型与 Java 虚拟机中的显示的类相匹配。使用标准机制按需加载类。
回复 使用道具 举报
LZ想想 如何将一个对象存储到文件中
序列化与反序列化也是因为储存的是对象的特殊原因
回复 使用道具 举报
ObjectInputStream与ObjectOutputStream 意义在于与FileInputStream 和  FileOutputStream 配合使用 实现持久化存储.
说白了就是和序列化反序列化一个道理.生成的代码只有一部分你能看懂. 用的时候直接调用生成的文件.完成持久化存储
回复 使用道具 举报
是不是把创建的对象通过ObjectInputStream与ObjectOutputStream 配合FileInputStream 和  FileOutputStream储存在文件上啊!
回复 使用道具 举报
ObjectInputStream作用是将类的对象在堆内存中的数据存入文件或写入流,专业说法是对象的序列化。所以他的构造函数可以接收文件或或者其他输出流。
ObjectInputStream的作用是将已经被序列化了的类的对象从文件或流中读出,专业叫法是对象的反序列化。所以他的构造函数也可以接收文件和输入流。当然在读取对象时,会加载相应对象的类文件。在读取前如果类的源文件改变,则不能放序列化。
所以说这两流在操作对象时是依赖类的。
与其他IO流的区别就在于,他们是为专门造作对象而存在的流。
回复 使用道具 举报
ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久性存储......
API文档介绍得很清楚,建议楼主好好看看

import java.io.*;
class  CopyPic
{
        public static void main(String[] args)
        {
                FileOutputStream fos = null;
                FileInputStream fis = null;//FileOutputStream它以本地文件系统作为输入流起点, 与其他与文件有关的类配合可以对文件进行读写操作
                try
                {
                        fos = new FileOutputStream("c:\\2.bmp");//用字节写入流对象创建一个图片文件。用于存储获取到的图片数据
                        fis = new FileInputStream("c:\\1.bmp");//用字节读取流对象和图片关联

                        byte[] buf = new byte[1024];

                        int len = 0;

                        while((len=fis.read(buf))!=-1)//通过循环读写,完成数据的存储
                        {
                                fos.write(buf,0,len);
                        }
                }
                catch (IOException e)
                {
                        throw new RuntimeException("复制文件失败");
                }
                finally
                {
                        try
                        {
                                if(fis!=null)
                                        fis.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("读取关闭失败");
                        }
                        try
                        {
                                if(fos!=null)
                                        fos.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("写入关闭失败");
                        }
                }
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马