黑马程序员技术交流社区

标题: IO中的操作对象,ObjectInputStream与ObjectOutputStream [打印本页]

作者: 郭振    时间: 2012-5-13 13:11
标题: IO中的操作对象,ObjectInputStream与ObjectOutputStream
ObjectInputStream与ObjectOutputStream这两个类看了半天的视频也不明白,它具体是什么时候用,和其他流有什么区别?怎么去理解ObjectInputStream与ObjectOutputStream与其他流的关系?
作者: hongbo    时间: 2012-5-13 13:20
ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。
ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久性存储。ObjectInputStream 用于恢复那些以前序列化的对象。其他用途包括使用套接字流在主机之间传递对象,或者用于编组和解组远程通信系统中的实参和形参。
ObjectInputStream 确保从流创建的图形中所有对象的类型与 Java 虚拟机中的显示的类相匹配。使用标准机制按需加载类。
作者: 倪杭乘    时间: 2012-5-13 13:37
LZ想想 如何将一个对象存储到文件中
序列化与反序列化也是因为储存的是对象的特殊原因
作者: 孙宇晨    时间: 2012-5-13 13:47
ObjectInputStream与ObjectOutputStream 意义在于与FileInputStream 和  FileOutputStream 配合使用 实现持久化存储.
说白了就是和序列化反序列化一个道理.生成的代码只有一部分你能看懂. 用的时候直接调用生成的文件.完成持久化存储
作者: 郭振    时间: 2012-5-13 13:53
是不是把创建的对象通过ObjectInputStream与ObjectOutputStream 配合FileInputStream 和  FileOutputStream储存在文件上啊!
作者: 廖理    时间: 2012-5-13 15:35
ObjectInputStream作用是将类的对象在堆内存中的数据存入文件或写入流,专业说法是对象的序列化。所以他的构造函数可以接收文件或或者其他输出流。
ObjectInputStream的作用是将已经被序列化了的类的对象从文件或流中读出,专业叫法是对象的反序列化。所以他的构造函数也可以接收文件和输入流。当然在读取对象时,会加载相应对象的类文件。在读取前如果类的源文件改变,则不能放序列化。
所以说这两流在操作对象时是依赖类的。
与其他IO流的区别就在于,他们是为专门造作对象而存在的流。

作者: 张文建    时间: 2012-5-13 15:51
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("写入关闭失败");
                        }
                }
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2