对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务。而Java类库的设计者采用了装饰者模式来解决这个问题,即便如此,但Java的I/O类库还是如此之多,以至于我刚开始接触I/O时也是一脸懵逼。为了读取一个File还得层层嵌套。
1.输入输出.
Java的输入输出都是以我们的Java程序为主体,从硬盘或内存读取数据到Java程序叫做输入,从程序写入硬盘或内存叫做输出。通过继承,任何自inputStream或Reader中派生而来的类都含有read()的基本方法,用于读取单个字节或者是字节数组。同样,任何自OutputStream或Writer中派生而来的类都含有write()的基本方法,用于将单个字节或者字节数组写入磁盘或内存。
2.字节流
a.字节输入流inputStream
InputStream是所有字节输入流的超类。作用是读取内存或磁盘上的内容到Java程序中,主要有read()读取一个字节,read(byte[] b)读取一个字节数组,read(byte[] b, int off, int len)从off开始读取len个字节到byte数组。
b.字节输出流OutputStream
OutputStream就是所有的字节输出流的超类。作用是将Java程序中的内容写出文件到内存或者磁盘,并且每次只操作文件的一个字节。从jdk文档了解到方法,
write(int b)写入一个字节,write(byte[] b)写入字节数组到输出流,write(byte[] b, int off, int len)将byte数组中的从偏移量off开始写入len个字节到输出流中。
close()方法,关闭此输出流并释放与此流有关的所有系统资源。
flush()方法,刷新此输出流并写出此输出流中的所有字节
3. 字符流
字符流主要是提供了兼容unicode和面向字符的I/O功能,只能读取和写入文本。
a. 字符输入流
字符输入流的超类是Reader。主要提供了以下:
read()读取单个字符
read(char[] c)读取到字符数组
read(char[] c, int off, int len)将字符读入数组的某一部分
b.字符输出流
字符输出流的超类是Writer。主要提供了一下方法:
write(int c)写入单个字符
write(char[] c)写入字符数组
write(char[] c, int off, int len)写入字符数组的某一部分
write(String s)写入字符串
write(String s, int off, int len)写入字符串的某一部分。