携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情
01.IO流_概述
1).字节流:
A).输出流:OutputStream
|--FileOutputStream(基本流)
|--FilterOutputStream
|--BufferedOutputStream(缓冲流)
B).输入流:InputStream
|--FileInputStream(基本流)
|--FilterInputStream
|--BufferedInputStream(缓冲流)
2).字符流:
A).输出流:Writer
|--OutputStreamWriter(转换流)
|--FileWriter(基本流)
|--BufferedWriter(缓冲流)
B).输入流:Reader
|--InputStreamReader(转换流)
|--FileReader(基本流)
|--BufferedReader(缓冲流)
02.IO流_一切皆为字节
在数据传输过程中,一切数据(文本、图像、声音等)最终存储的均为一个个字节,即二进制数字。
所以数据传输过程中使用二进制数据可以完成任意数据的传递。
我们向一个文件中存储一定的数据(一些数字),如果使用文本方式打开,则会以文本的方式解释数据。
如果以视频的方式打开,则会以视频的方式解释数据。
音频、可行执行文件等亦是如此。所以,在文件传输过程中,我们要时刻明确,传输的始终为二进制数据
03.IO流_字节输出流FileOutputStream_构造方法
1).FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。 覆盖写入
2).FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。 追加写入
3).FileOutputStream(File file)创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 覆盖写入
4).FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 追加写入
注意:构造时,文件可以不存在,会自动创建一个。
04.IO流_字节输出流FileOutputStream_三种输出的方法
1).write(int b):输出一个字节;
2).write(byte[] arr):输出一个字节数组
3).write(byte[] arr,int off,int len):输出一个字节数组的一部分。
05.IO流_字节输出流FileOutputStream_追加写入和换行
1).追加写入:使用两个构造方法
FileOutputStream(String name, boolean append)
FileOutputStream(File file, boolean append)
2).换行:
out.write("\r\n".getBytes());
3).关闭流:
out.close();
06.IO流_字节输入流FileInputStream_构造方法
FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
注意:构造时,文件必须存在,否则抛异常。
07.IO流_字节输入流FileInputStream_两种读取的方法
1).int read():读取一个字节;返回值:读取的字节
2).int read(byte[] b):读取一个字节数组;返回值:读取的字节数量
08.IO流_练习_复制文件_一次读写一个字节
//1.构造一个输入流
FileInputStream in = new FileInputStream("d:\\douyu.exe");
//2.构造一个输出流
FileOutputStream out = new FileOutputStream("e:\\douyu.exe");
//3.复制:一次读写一个字节
int b = 0;
while((b = in.read()) != -1){
out.write(b);
}
//4.关闭资源
out.close();
in.close();
09.IO流_练习_复制文件_一次读写一个字节数组
//1.构造一个输入流
FileInputStream in = new FileInputStream("d:\\douyu.exe");
//2.构造一个输出流
FileOutputStream out = new FileOutputStream("e:\\douyu.exe");
//3.复制:一次读写一个字节数组
byte[] byteArray = new byte[1024];
int len = 0;
while((len = in.read(byteArray)) != -1){
out.write(byteArray,0,len);
}
//4.关闭资源
out.close();
in.close();
10.IO流_高效缓冲输出流_BufferedOutptuStream
1.BufferedOutputStream工作方式:
-
1).调用write()方法时,数据被输出到"缓存区"中。
-
2).当缓存区满,或者flush()或者close()时,会将缓存区的内容一次性写入到磁盘。
2.构造方法:
- BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
.IO流_高效缓冲输入流_BufferedInputStream
1.BufferedInputStream的工作方法:
- ).先从文件中读取8K数据到内部缓存区;
- ).再从缓存区读取到程序中(一次读取一个字节,一次读取一个字节数组)
2.构造方法:
- ufferedInputStream(InputStream in) 创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。