一、IO简介
1.输入输出(Input/Output)。程序与外界进行数据交换的管道
输入指的是:可以让程序从外部系统获得数据(核心含义是‘读’,读取外部数据)。
常见的应用:
读取硬盘上的文件内容到程序。例如:播放器打开一个视频文件,word打开一个doc文件
读取网络上某个位置内容到程序。例如:浏览器中输入网址后,打开该网址对应的网页内容,下载网络上某个网址的文件。
输出(Output)指的是:程序输出数据给外部系统从而可以操作外部系统(核心含义是‘写’,将数据写出到外部系统)
常见的应用:
将数据写到硬盘中。例如:我们编写万一个word文档后,将内容写到硬盘进行保存。
将数据写到数据库系统中。例如:我们注册一个网址会员,实际就是后台程序向数据库写入一条记录。
2.Java中四大IO抽象类
字节流:InputStream/OutputStream 数据的单位为字节8bit int read():读取一个字节的数据,并将字节的值作为int类型返回(0~255),如果未读出字节则返回-1
字符流:Reader/Writer 数据单位为字符 int read() 读取一个字符的数据,并将字符的值作为int类型返回(0~65535)
3.Java中流的分类:
按流的方向分类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)
按处理的数据单元分类:
字节流:命名上以Stream结尾的一般是字节流,如(FileInputStream、FileOutputStream)
字符流:命名上以Reader/Writer结尾的一般是字符流,如(FileReader、FileWriter)
按处理对象不同分类:
节点流:
可以直接从数据源或目的地读写数据,如FileInputStream、FileOutputStream、FileReader、FileWirter、DataInputStream、DataOutputStream
处理流:
不直接连接到数据源或目的地,通过对其他流的处理提高程序的性能,如BufferInputStream、BufferedReader等,处理流也叫作包装流。
4.Java中IO流类的体系
① InputStream/OutputStream
字节流的抽象类。
② Reader/Writer
字符流的抽象类。
③ FilelnputStream/FileOutputStream
节点流:以字节为单位直接操作“文件”。
④ ByteArraylnputStream/ByteArrayOutputStream
节点流:以字节为单位直接操作“字节数组对象”。
⑤ ObjectInputStream/ObjectOutputStream
处理流:以字节为单位直接操作“对象”。
⑥ DatalnputStream/DataOutputStream
处理流:以字节为单位直接操作“基本数据类型与字符串类型”。
⑦ FileReader/FileWriter
节点流:以字符为单位直接操作“文本文件”(注意:只能读写文本文件)。
⑧ BufferedReader/BufferedWriter
处理流:将Reader/Writer对象进行包装,增加缓存功能,提高读写效率。
⑨ BufferedInputStream/BufferedOutputStream
处理流:将InputStream/OutputStream对象进行包装,增加缓存功能,提高
读写效率。
⑩ InputStreamReader/OutputStreamWriter
处理流:将字节流对象转化成字符流对象。
⑪ PrintStream
处理流:将OutputStream进行包装,可以方便地输出字符,更加灵活。