JDK中封装的操作IO流的一系列工具类,位于java.io包。
一、What
1、IO是什么?Java IO又是什么?
IO,Input/Output,输入/输出。计算机系统中,主要分为IO设备和IO接口。IO设备中,如从键盘输入、通过显示器输出。IO接口中,指的是操作系统与外部设备的接口,外部设备向操作系统输入,操作系统处理后向外部设备输出。
java程序中的IO,指的是对jvm内存的输入,jvm向外的输出。比如java程序读写文件,读是从硬盘向jvm内存输入,写是从jvm内存向硬盘输出。
2、Java IO框架指的是什么?
Java IO框架是JDK中封装的操作IO流的一系列工具类。
二、Why
1、掌握了Java IO框架有什么用处?
掌握Java IO流,当遇到需要处理文件读写等数据传输场景,能轻松写出性能优良的代码。
三、How
如何学习掌握”Java IO框架“,可以通过以下步骤循序渐进:
- 了解流的概念和分类
- 熟练使用IO框架中的常用类
- 熟悉jdk8中IO框架的相关源码
1、了解流的概念和分类
1.1 流的概念
计算机中的流,就像现实世界中的水流、电流,水流中流动的主要是水分子,电流中流动的是电子,计算机流中流动的是一个个数据字节。
1.2 Java中流的分类
- 按数据流的方向:
- 输入流
- 输出流
- 按处理数据的单位:
- 字节流
- 字符流
- 按功能:
- 节点流(底层流/低级流,直接操作数据源的流。)
- 处理流(包装流,在节点流的基础上进行包装,对功能进行增强。)
2、掌握IO框架的常用场景
2.1 场景使用的原则
- 当操作的是纯文本文件时,优先使用字符流。
- 当操作的是音视频等二进制文件时,优先使用字节流。
- 当不确定操作文件的类型时,优先使用字节流。
2.2 常用的字节流
2.2.1 FileOutputStream
输出流,程序写文件时使用。
使用步骤如下:
1、创建输出流对象
// 向指定名称的文件写入数据。
FileOutputStream fos = new FileOutputStream("abc.txt");
// 实例化对象过程中,做了三件事
// 1.创建指定名称的文件
// 2.创建字节输出流对象
// 3.让输出流指向文件
FileOutputStream类的5种实例化入参方式:
new FileOutputStream(String name);
new FileOutputStream(String name, boolean append);
new FileOutputStream(File file);
new FileOutputStream(File file, boolean append);
new FileOutputStream(FileDescriptor obj);
// 其中append参数为true时,表示每次调用write方法写数据时写到文件的末尾。
2、写数据
fos.write(123);
// write方法的三种入参
void write(int b);
void write(byte[] b);
void write(byte[] b, int off, int len);
3、关闭输出流对象
fos.close();
2.2.2 FileInputStream
输入流,程序读文件时使用。
使用步骤如下:
1、创建输入流对象
// 向指定名称的文件读取数据。
FileInputStream fis = new FileInputStream("def.txt");
2、循化读数据
int b;
while ((b=fis.read())!=-1) {
// b为每次读区到的1个字节。
}
// write方法的三种入参
int read();
int read(byte b[]);
int read(byte b[], int off, int len);
3、关闭输入流对象
fis.close();
2.2.3 BufferOutputStream 和 BufferedInputStream
缓冲字节流,使用步骤同FileOutputStream和FileInputStream,只是创建对象时略有不同:
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("abc.txt"));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("def.txt"));
2.3 常用的字符流
2.3.1 OutputStreamWriter
字符输出流,写字符。
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("def.txt"));
写数据的方式:
- void write(int c)
- void write(char[] cbuf)
- void write(char[] cbuf, int off, int len)
- void write(String str)
- void write(String str, int off, int len)
2.3.2 InputStreamReader
字符输入流,读字符。
InputStreamReader isr = new InputStreamReader(new FileInputStream("abc.txt"))
读数据的方式:
- int read()
- int read(char[] cbuf)
2.3.3 FileWriter和FileReader
对象实例化方式不同,可以直接用文件的路径入参。
FileWriter fw = new FileWriter("abc.txt");
内部默认以FileOutputStream对象入参。
2.3.4 BufferedWriter和BufferedReader
字符缓冲流。
BufferedReader br = new BufferedReader(new FileReader("abc.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("def.txt"));
3、熟悉jdk8中IO框架的相关源码
3、熟悉jdk8中IO框架的相关源码
- File
- 输入流
- InputStream(基类)
- FileInputSream
- BufferedInputStream
- DataInputStream
- ByteArrayInputStream
- FilterInputStream
- PushbackInputStream
- ObjectInputStream
- PipedInputStream
- SequenceInputStream
- StringBufferInputStream
- FileInputSream
- Reader(基类)
- InputSreamReader
- FileReader
- BufferedReader
- LineNumberReader
- CharArrayReader
- FilterReader
- PushbackReader
- PipedReader
- StringReader
- InputSreamReader
- InputStream(基类)
- 输出流
- OutputSream(基类)
- FileOutputStream
- BufferedOutputStream
- DataOutputStream
- ByteArrayOutputStream
- FilterOutputStream
- PrintStream
- ObjectOutputStream
- PipedOutputStream
- FileOutputStream
- Writer(基类)
- OutputStreamWriter
- FileWriter
- BufferedWriter
- CharArrayWriter
- FilterWriter
- PipedWriter
- PrintWriter
- StringWriter
- OutputStreamWriter
- OutputSream(基类)