黑马程序员——JAVA学习笔记---IO处理方式

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一 I/O的基本模式

 Java由数据流处理输入输出模式。输入模式是由程序创建某个信息来源的数据流并打开该数据流获取指定信息来源的数据,这些数据来源可以是文件、网络、压缩包或者其他数据源,如图所示。

黑马程序员——JAVA学习笔记---IO处理方式_第1张图片
图 输入模式

与输入模式相反,输出模式是由程序创建某个输出对象的数据流,并打开该数据对象(即输出目标),将数据写入数据流。数据流对象会将数据存储到相应的目标中。这些输出目标可以是文件、网络、压缩包、控制台或其他数据输出目标,如图所示。

黑马程序员——JAVA学习笔记---IO处理方式_第2张图片

图 输出模式

二 Java提供的流类

Java语言定义了许多类专门负责各种方式的输入和输出,这些类都被放在java.io包中。其中,所有输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类,而所有输出流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。

三 输入流

InputStream类是字节输入流的抽象类,是所有字节输入流的父类。InputStream类的具体层次结构如图所示。

黑马程序员——JAVA学习笔记---IO处理方式_第3张图片
图 InputStream类的层次结构
mark(int readlimit)方法:在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数。
reset()方法:将输入指针返回到当前所做的标记处。
skip(long n)方法:跳过输入流上的n个字节并返回实际跳过的字节数。
markSupported()方法:如果当前流支持mark()/reset()操作,就返回true。
close()方法:关闭此输入流并释放与该流关联的所有系统资源。
说明:并不是所有的InputStream类的子类都支持InputStream中定义的所有方法(如skip()、mark()、reset()等),这些方法只对某些子类有用。

Java中的字符是Unicode编码,是双字节的。InputStream是用来处理字节的,在处理字符文本时不是很方便。Java为字符文本的输入提供了单独一套专门的类Reader,但Reader类并不是InputStream类的替换者,只是在处理字符串时简化了编程。Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类,Reader类的具体层次结构如图所示。

黑马程序员——JAVA学习笔记---IO处理方式_第4张图片

图 Reader类的层次结构
Reader类中的方法与InputStream中的方法类似,读者在需要时可查看JDK文档。

四 输出流

OutputStream类是字节输出流的抽象类,此抽象类是表示输出字节流的所有类的超类。OutputStream类的层次结构如图所示。

黑马程序员——JAVA学习笔记---IO处理方式_第5张图片
图 OutputStream类的层次结构

OutputStream类中的所有方法均返回void,在遇到错误时会引发IOException异常。下面对OutputStream类中的方法做一个简单的介绍。

write(int b)方法:将指定的字节写入此输出流。
write(byte[] b)方法:将b.length个字节从指定的byte数组写入此输出流。
write(byte[] b , int off , ,int len)方法:将指定byte数组中从偏移量off开始的len个字节写入此输出流。
flush()方法:彻底完成输出并清空缓存区。
close()方法:关闭输出流。
Writer类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。Writer类的层次结构如图所示。

黑马程序员——JAVA学习笔记---IO处理方式_第6张图片

图 Writer类的层次结构

你可能感兴趣的:(JAVA学习笔记,JAVA学习笔记)