Java基础知识章节梳理(二十)

文字数:约1600字  阅读时间:30分钟

此文章为学习总结类型,文字很多且皆为基础知识

一.IO流

1. 介绍

IO是两个单词的缩写,I(Input输入)O(Output输出)

1) 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output 操作。

2) 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input 操作。

3) 因此我们把这种输入和输出动作称为 IO 操作。

IO流是专门用来操作文件中的内容,可以将程序中(内存中)的数据写到硬盘中,也可以从硬盘上读一些数据到程序中(内存中)

2. 一切都是字节

1) 在计算机的硬盘上存在的任意数据,最终的体现形式都是字节

2) 一个0或一个1就是一个比特位,简称位,八个比特位是一个字节

3) 计算机硬盘保存数据的最小单位是字节

IO流概念理解图:

Java基础知识章节梳理(二十)_第1张图片

 

3. 分类

3.1 按照流向

3.1.1 字节输入流 InputStream 抽象类

1. 介绍

字节输入流的所有类的超类,这里面的方法都是通用方法

2. 共性方法

read() :从输入流中读取数据的下一个字节。(返回值为读取到的这个字节的ASCII码值)   

read(byte[] b) :从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。

read(byte[] b, int off, int len) :将输入流中最多 len 个数据字节读入 byte 数组。(

off表示数组可以从哪个索引开始使用

len表示可以使用的个数

返回值是b中保存的有效字节的个数

)

close() :关闭此输出流并释放与此流有关的所有系统资源。

3. 普通字节输入流FileInputStream

3.1 介绍

1) InputStream的子类

2) 从文件系统中的某个文件中获得输入字节

3.2 构造方法

FileInputStream(File file) :通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

FileInputStream(String name) : 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

4. 字节缓冲输入流 BufferedInputStream

4.1 缓冲流介绍

就是自带了一个缓冲区,可以提升IO流读写的效率

4.2 构造方法

1) BufferedInputStream(InputStream in) :创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

2) 依然使用顶层超类的方法

3.1.2 字节输出流 OutputStream 抽象类

1. 介绍

表示字节输出流的所有类的超类,这里面的方法都是通用方法

2. 共性方法

close() :关闭此输出流并释放与此流有关的所有系统资源。

flush() : 刷新此输出流并强制写出所有缓冲的输出字节。

write(byte[] b) :将 b.length 个字节从指定的 byte 数组写入此输出流。

write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

write(int b) :将指定的字节写入此输出流。 (b就是一个字节的码值(人为的规定了一个数字代表着一个符号,保存这些规定的表称为ASCII码表,这个数值称为ASCII码值))

3. 普通字节输出流FileOutputStream

3.1 介绍

1) 是OutPutStream的子类

2) 文件输出流,是用于操作硬盘上数据的输出流对象。

3.2 构造方法

1) FileOutputStream(File file) :创建一个向指定 File 对象表示的文件中写入数据的文件输出流

2) FileOutputStream(String name) :创建一个向具有指定名称的文件中写入数据的文件输出流

3) 续写构造

1. 希望在创建输出流对象的时候不要删除原文件,不删除原文件并且在原先文件的基础上进行续写的话,需要选择带布尔类型参数的构造方法,写成true,默认不写为false

2. FileOutputStream(String name, boolean append) :创建一个向具有指定 name 的文件中写入数据的输出文件流

3. FileOutputStream(File file, boolean append) :创建一个向指定 File 对象表示的文件中写入数据的文件输出流

4. 字节缓冲输出流 BufferedOutputStream

4.1 缓冲流介绍

就是自带了一个缓冲区,可以提升IO流读写的效率

4.2 构造方法

BufferedOutputStream(OutputStream out) :创建一个新的缓冲输出流,以将数据写入指定的底层输出流

4.3 依然使用顶层超类的方法

3.1.3 涉及到的方法

1. String

1) getBytes():将一个字符串转换成一个对应字节数组

2) String(byte[] bytes, int offset, int length) :通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。(

bytes里存的是需要解码的字节码值

offset是开始的索引

length是需要解码的个数

)

3.2 按照传输方式

1) 按照字符的方式读写

仅能操作文本类型的文件

2) 按照字节的方式读写

万能流(可以操作任意类型的文件)

4. 四种方式复制文件

1) 字节输入流与字节输出流,逐字节循环读写

FileOutputStream fos = new FileOutputStream("a.txt");

FileInputStream fis = new FileInputStream("b.txt");

int i = -1;

while((i=fis.read())!=-1) {

fos.write(i);

}

fos.close();

fis.close();

2) 字节输入流与字节输出流,使用字节数组循环读写

FileOutputStream fos = new FileOutputStream("a.txt");

FileInputStream fis = new FileInputStream("b.txt");

byte[] barr = new byte[1024];

int len = 0;

while((len=fis.read(barr))!=-1) {

fos.write(barr,0,len);

}

fos.close();

fis.close();

3) 缓冲字节输入流与缓冲字节输出流,逐字节循环读写

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("b.txt"));

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a.txt"));

int len = -1;

while((len=bis.read())!=-1) {

bos.write(len);

}

bos.close();

bis.close();

4) 缓冲字节输入流与缓冲字节输出流,使用字节数组循环读写

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("b.txt"));

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a.txt"));

byte[] barr = new byte[1024];

int len = 0;

while((len=bis.read(barr))!=-1) {

bos.write(barr,0,len);

}

bos.close();

bis.close();

5. 结论

1) 缓冲流加数组效率最高

2) 基本流加数组次之

3) 缓冲流逐字节次之

4) 基本流逐字节最慢

你可能感兴趣的:(java基础,java基础,入门学习)