Learn && Live
虚度年华浮萍于世,勤学善思至死不渝
前言
Hey,欢迎阅读Connor学Java系列,这个系列记录了我的Java基础知识学习、复盘过程,欢迎各位大佬阅读斧正!原创不易,转载请注明出处:http://t.csdn.cn/z0svm,话不多说我们马上开始!
1.Java IO分类?
2.Java IO类型图?
字节流介绍
InputStream:abstract,为所有实现子类定义了处理输入流的方法
FileInputStream:文件输入流,用于对文件进行读取操作
PipedInputStream:管道字节输入流,能实现多线程间的管道通信
ByteArrayInputStream:字节数组输入流,将资源文件都以字节的形式存入字节数组中
FilterInputStream:装饰者类,具体的装饰者类继承该类,作用是对节点类进行封装,实现一些特殊功能
BufferedInputStream:缓冲流,内部有一个缓存区,用来存放字节,每次都是将缓存区存满然后发送,而不是逐个字节发送,效率更高
DataInputStream:数据输入流,用来装饰其他流,允许应用程序以机器无关方式从底层输入流中读取基本Java数据类型
ObjectInputStream:对象输入流,直接传输对象,通常应用在反序列化中
OutputStream与InputStream类似,方向相反
字节流方法
字节输入流InputStream主要方法:
(1)read() :从此输入流中读取一个数据字节。
(2)read(byte[] b) :从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
(3)read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
(4)close():关闭此输入流并释放与该流关联的所有系统资源。
字节输出流OutputStream主要方法:
(1)write(byte[] b) :将 b.length 个字节从指定 byte 数组写入此文件输出流中。
(2)write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
(3)write(int b) :将指定字节写入此文件输出流。
(4)close() :关闭此输入流并释放与该流关联的所有系统资源。
字符流介绍
FileReader:用于读取字符文件的便利类,new FileReader(File file)等同于new InputStreamReader(new FileInputStream(file, true),“UTF-8”),但FileReader不能指定字符编码和默认字节缓冲区大小。
PipedReader :管道字符输入流。实现多线程间的管道通信。
CharArrayReader:从Char数组中读取数据的介质流。
InputStreamReader:从字节流到字符流的桥梁(InputStreamReader构造器入参是FileInputStream的实例对象),它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以通过名称指定,也可以显式给定,或者可以接受平台的默认字符集。
BufferedReader:从字符输入流中读取文本,设置一个缓冲区来提高效率。BufferedReader是对InputStreamReader的封装,前者构造器的入参就是后者的一个实例对象。
Writer与Reader类似,方向相反
字符流方法
字符输入流Reader主要方法:
(1)read():读取单个字符。
(2)read(char[] cbuf) :将字符读入数组。
(3)read(char[] cbuf, int off, int len) : 将字符读入数组的某一部分。
(4)read(CharBuffer target) :试图将字符读入指定的字符缓冲区。
(5)flush() :刷新该流的缓冲。
(6)close() :关闭此流,但要先刷新它。
字符输出流Writer主要方法:
(1)write(char[] cbuf) :写入字符数组。
(2)write(char[] cbuf, int off, int len) :写入字符数组的某一部分。
(3)write(int c) :写入单个字符。
(4)write(String str) :写入字符串。
(5)write(String str, int off, int len) :写入字符串的某一部分。
(6)flush() :刷新该流的缓冲。
(7)close() :关闭此流,但要先刷新它。
(8)BufferedWriter类newLine() :写入一个行分隔符。这个方法会自动适配所在系统的行分隔符。
BufferedReader类readLine() :读取一个文本行。
3.字节流和字符流有什么区别?
字节流:按8位传输,以字节为单位输入输出数据
字符流:按16位传输,以字符为单位输入输出数据
4.介绍一下File类?
public class File extends Object implements Serializable, Comparable<File>
File实现了Serializable和Comparable接口,可序列化可排序,用于处理文件,而非文件中的数据
File类的构造器
File类常用方法
5.BIO、NIO、AIO有什么区别?
BIO
同步阻塞,数据的读取写入必须阻塞在一个线程中等待其完成,并发执行能力低
NIO
(1)Non-blocking / New IO,同步非阻塞
(2)提供了Channel、Selector、Buffer等抽象,支持面向缓冲的,基于通道的I/O操作方式
(3)NIO提供了与传统BIO模型中的Socket和ServerSocket相对应的SocketChannel和ServerSocketChannel两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。阻塞模式与BIO一样,可用于低负载、低并发的应用程序;非阻塞模式与之相反,可用于高负载、高并发的应用程序
AIO
(1)Asynchronous IO,也叫NIO2,异步非阻塞
(2)基于事件和回调机制,应用操作之后直接返回,当后台处理完成,操作系统会通知相应的线程进行后续的操作