IO流常用基类
1.为什么我们需要IO?
IO流主要是处理应用程序之外的数据交互 ;Input 输入 Output输出
2.IO流的分类
根据数据流向分类:输入流(读入数据) 与 输出流(写出数据)
即输入流 inputStream/Reader 与输出流 outputStream/Writer
根据数据类型分类:字节流与字符流
即字节输入流/输出流 inputStream/outputStream
字符流:Reader/Writer
在Java IO技术中,数据可以保存到文本文件,二进制文件以及压缩文件中,Java中的字符是Unicode编码,是双字节的,inputstream是处理字节的,
在处理字符文本时不是很方便,Java为字符文本的输入提供了专门的一套单独的类reader,但reader类并不是inputstream类的替换者,只是在处理字符串时简化了编程。
转换流的作用是将字节流转换为字符流,字符流就是处理文本的,java针对转换提供了两个API:InputStreamReader 与OutputStreamWriter。
3.NIO NO-NEW INPUT OUTPUT
传统IO存在如下几个问题:
1.线程资源受限:线程是操作系统中非常宝贵的资源,同一时刻有大量的线程处于阻塞状态是非常严重的资源浪费,操作系统耗不起
2.线程切换效率低下:单机cpu核数固定,线程爆炸之后操作系统频繁进行线程切换,应用性能急剧下降。
3.除了以上两个问题,IO编程中,我们看到数据读写是以字节流为单位,效率不高。
jdk4就出现了NIO,其是面向块(缓冲区)来处理数据的
NIO主要用在架构方面处理高并发高性能方面的应用,是以缓存、选择器+channel 通道的方式,新IO是不阻塞的,可以使用多线程进行处理,使用事件驱动。