Java基础-IO流_字节流_高效流

101 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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,以便将来使用。