了解Java IO流
Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述
为“流”(stream),通过流的方式允许Java程序使用相同的方式来访问不同的输入输出源。 stream是从起源(source)到接收(sink)的有序数据。影响IO性能的无非就是两大因素:数据的格式及存储的方式,前两类主要是数据格式方面的,后两个类是存储方式方面的:本地和网络。所以策划好这两个方面的活动,有助于我们合理使用IO。Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入输出功能。
1.IO流的分类
根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流
2、传统的java.io包中的IO有什么特点?
基于stream模型实现,提供了常见的IO功能: File抽象、输入输出流
交互方式:同步、阻塞的方式
在读写动作完成前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。
3、Stream(流)到底是什么?有什么用?
Out:代表能产出数据的数据源对象
In:代表能接受数据的数据源对象
作用:为数据源和目的地搭建一个传输通道
4、java.io包的好处和缺点
Java.io的优点:代码简单、直观
Java.io的缺点:IO效率、扩展性存在局限性,会成为应用性能的瓶颈
5、IO流是的分类和作用的Input流和Output流
主要用于处理设备间的数据传输
6、IO流的两种分类方式分别是
字节流和字符流
输入流和输出流
7、字符流与字节流的区别有哪些?
处理对象不同:字节流能处理所有类型的数据(如图片、多媒体等)
字符流只能处理字符类型的文本数据。
读写单位不同:字节流以字节byte为单位,1byte=8bit。
字符流以字符为单位,1个字符=2个字节(java中采用unicode编码)。根据码表映射字符,一次可能读多个字节。
有无缓冲区:字节流没有缓冲区,是直接输出的。字节流不调用colse()方法时,信息就已经输出了。
字符流是输出到缓冲区的。只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。
8、如何选择字符流和字节流
只要是处理纯文本数据,就优先考虑使用字符流
除此之外都使用字节流
9、Java传统IO相关的类图
借几张网络图片来说明
(图片来自 http://blog.youkuaiyun.com/zhangerqing/article/details/8466532 )
上图可以看到,整个Java IO体系都是基于字符流(InputStream/OutputStream) 和 字节流(Reader/Writer)作为基类,根据不同的数据载体或功能派生出来的。
10、java.io包中六大类和接口有哪些?
File、RandomAccessFile、InputStream、OutputStream、Reader、Writer
Serializable
11、InputStream/OutputStream 和 Reader/Writer 的关系和区别。
都实现了Closeable接口,用于资源的释放。
字节流: InputStream/OutputStream
字符流: Reader/Writer