io复习

操作对象:

         通过流,将对象保存到硬盘上

ObjectOutputStream

构造函数中接收流

通过方法writeObject(Object obj)操作对象

被操作的对象需要实现Serializable接口,使对象序列化,标识对象


需要注意:static修饰的属性不能被序列化

如果希望非静态属性也不被序列化,则在属性前面加上trasient修饰

 

管道流:(涉及到多线程)

         PipedInputStream和PipedOutputStream

         输入输出可以直接进行连接

         该流对象是阻塞式的,读取流读到数据才会继续执行,否则会一直等待,直到读到数据

连接有两种方法:

1,  直接将流对象做为构造函数的参数传入彼此

2,  分别创建对象后通过connect()方法连接

代码演示:






RandomAccessFile

         支持随机访问文件的读取和写入

         该类不是IO体系中子类

         而是直接继承自Object。

         但是它是IO包中的成员,因为它具备读和写功能

         内部封装了一个数组,而且通过指针对数组的元素进行操作。

         可以通过getFilePointer获取指针位置。

         同时可以通过seek改变指针的位置

 

         其实完成读写的原理就是内部封装了字节输入流和输出流

 

         通过构造函数可以看出来,该类只能操作文件,而且还有模式,参数”r”只读”rw”

读写”rws””rwd”

 

DataInputStream和DataOutputStream

专门用来操作基本数据类型的流对象




操作字节数组

ByteArrayInputStream和ByteArrayOutputStream

 

ByteArrayInputStream在构造的时候,需要接收数据源,而且数据源是一个字节数组

ByteArrayOutputStream:在构造的时候,不用定义数据目的,因为该对象中已经封装了可变长度的字节数组。这就是数据目的地

 

因为这两个对象都操作的数组,并没有使用系统资源。所以不用关闭流


操作字符数组

CharArrayReader和CharArrayWriter

 

操作字符串

StringReader和StringWriter

 

字符集编码问题:

         使用不同的字符集进行读写,会出现乱码


编码:字符串变成字节数组

解码:字节数组变成字符串

 

Stringàbyte[]

Byte[]àString



练习:

五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括姓名,三门课成绩),

输入格式:zhangsan,30,49,60计算出总成绩,并把学生的信息和计算出的总分数按高低顺序存放在磁盘文件”stud.txt”中。

思路:

1,  描述学生对象

2,  定义操作学生的工具类

思想:

1,  通过键盘录入一行数据,并将信息取出封装成学生对象

2,  将学生对象存储到集合中,因为要按成绩排序,所以用TreeSet集合

3,  将集合的信息写入到一个文件中

 

返回一个强行逆转比较器

 Comparator<>cmp = Collection.ReverseOrder();






发布了49 篇原创文章 · 获赞 12 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章