Java 对象流ObjectInputStream和ObjectOutputStream
来源:互联网 发布:mac os x 常用软件 编辑:程序博客网 时间:2024/04/30 13:52
我们知道Java中对文件操作有6种流:
1 文件字节流:这是InputStream和OutputStream的子类 eg: FileInputStream FileOutputStream
2 文件字符流 这是Reader和Writer的其子类 eg:FileReader FileWriter
3 缓冲流 BufferReader类创建的对象称为缓冲输入流,该输入流的指向必须是一个Reader流,称为BufferReader的底层流,底层流负责将数据读入到缓冲区,BufferReader流的源就是这个缓冲区,缓冲输入流再从缓冲区读取数据;同样的, BufferWriter类创建的对象称为缓冲输出流,该输入流的指向必须是一个Writer流,称为BufferWriter的底层流,BufferWriter流负责将数据写入到缓冲区,底层流的源就是这个缓冲区,底层流再从缓冲区写入数据到目的地
4 数据流 DataInputStream和DataOutputStream创建的对象称为数据输入流和数据输出流,这两个流允许程序按照与机器无关的风格读取Java原始数据。也就是说我们读取一个数值时候,不必关心这个数值应当是多少字节。
5 对象流 ObjectInputStream和ObjectOutputStream类分别是InputStream和OutputStream的子类。ObjectInputStream和ObjectOutputStream创建的对象称为对象输入流和对象输出流,对象输出流使用WriteObject(Object obj)方法将一个对象Obj写入输出流送往目的地,对象输入流则使用readObject()方法从源中读取一个对象到程序中。下面我着重讲解对象流
当我们使用对象流写入或者读取对象时,要保证对象是序列化的,这是为了保证能把对象写入到文件,并且从文件中正确读取到程序中。一个类如果实现了Serializable接口,那么这个类创建的对象就是序列化的对象,Serializable接口中的方法对程序是不可见的,因此实现该接口的类不需要实现额外的方法,当把一个序列化的对象写入到对象输出流的时候,JVM会自动的实现Serializable接口中的方法,按照一定格式的文本将对象写入到目的地。
但是我们应该明确,对象流写入到文件是以16进制保存的,因此使用普通的编辑器打开(word,记事本)会乱码,对象流本来就是适合网络之间的传输。
另外我们必须要明确是:使用readObject()只能从文件中读取一个一次,不能像BufferReader的readLine()方法一样可以循环控制中读取输入,也就是说如果文件中存在多个对象,那么只是读取第一个对象,例如:
但是当我们想要存放多个对象到某一个文件中并且想要读取的时候把所有的对象都读取出来,那么我们必须使用一种数据结构把这些对象存入,比喻list或者直接使用数组,并且必须保证存入时的数据结构和取出时的数据结构是一样的,比喻我们使用数组存放了对象,然后使用writerObject方法把这个数组写入,那么我们在使用readObject方法读取数据的时候必须将其返回类型定义为一个对象数组,例如:注意下面的代码和上面的代码的细微变化:
这里使用了一个对象数组data将两个对象存入并且读出的时候使用了对象数组来接收。
- Java 对象流ObjectInputStream和ObjectOutputStream类
- Java 对象流ObjectInputStream和ObjectOutputStream
- 对象流(ObjectOutputStream 和 ObjectInputStream)
- Java浅谈流之对象流ObjectInputStream和ObjectOutputStream
- Java ObjectInputStream 和 ObjectOutputStream
- java对象流ObjectInputStream、ObjectOutputStream的使用
- java 对象流(ObjectOutputStream,ObjectInputStream)
- Java的IO流--ObjectInputStream和ObjectOutputStream
- Java IO ObjectInputStream和ObjectOutputStream
- Java对象序列化ObjectOutputStream和ObjectInputStream示例
- Java对象序列化ObjectOutputStream和ObjectInputStream示例
- Java IO系列(五):读写对象ObjectOutputStream和ObjectInputStream
- Java-IO之对象输入流输出流(ObjectInputStream和ObjectOutputStream)
- Java IO流->处理流->对象流:ObjectOutputStream&ObjectInputStream
- java语言编程IO流之对象序列化和ObjectInputStream与ObjectOutputStream
- IO流之对象流ObjectOutputStream和ObjectInputStream
- Java IO流 ObjectInputStream类和ObjectOutputStream类
- Java 流中关于ObjectInputStream 和ObjectOutputStream 的陷进
- 从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南
- poj 题目1321 棋盘问题
- LeetCode-67. Add Binary
- Origin拼图
- 【Java编程】打印图形
- Java 对象流ObjectInputStream和ObjectOutputStream
- 【高精度】被限制的加法,石油大学
- Log4j的日志级别
- 【剑指offer】面试题19:正则表达式匹配
- SpringMvc入门到开发(五)之json数据交互,RESTful支持,拦截器【附详细截图】
- USACO-Section2.2 Subset Sums [动态规划]
- leetcode -14. Longest Common Prefix
- 架构师之路(十九)DOBBO打成jar包
- QT布局