欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-26 21:47:10
...

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

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

一.IO流

1. 介绍

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

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

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

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

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

2. 一切都是字节

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

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

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

IO流概念理解图:

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

 

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) 基本流逐字节最慢

上一篇: javaweb第一天 HTML

下一篇: Json格式