java中的io流知识总结_java中IO流的知识点总结

1.流的概念

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

2.IO流的分类

IO流分为字符流和字节流.

3.字节流和字符流的区别

1.字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。

2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

4.通过代码体现IO流中各种流的方法的使用

1.用普通字节流复制a文件的内容到b文件中

public class CopyFileDemo {

public static void main(String[] args) throws IOException {

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

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

//方式一:一次读取写入单个字节

int i=0;

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

fos.write(i);

}

fos.close();

fis.close();

//方式二:一次读取写入一个字节数组

byte[] by=new byte[1024];

int len=0;

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

fos.write(by,0,len);

}

fos.close();

fis.close();

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

2.使用高效字符流复制文件

public class CopyFileDemo3 {

public static void main(String[] args) throws IOException {

BufferedReader br=new BufferedReader(new FileReader("a.txt"));

//如果d文件中有数据,true表示继续往文件中追加数据

BufferedWriter bw=new BufferedWriter(new FileWriter("d.txt",true));

String line=null;

//高效字符输入流的特有方法readline(),每次读取一行数据

while((line=br.readLine())!=null){

bw.write(line);

//高效字符输出流的特有方法newline()

bw.newLine();

//将缓冲区中的数据刷到目的地文件中

bw.flush();

}

//关闭流,其实关闭的就是java调用的系统底层资源。在关闭前,会先刷新该流。

bw.close();

br.close();

}

}

注:

a.高效流不能直接对文件进行操作,必须通过普通流操作.高效流是从输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了

b.字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的,并且可以使用flush方法强制进行刷新缓冲区

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

5.转换流

InputStreamReader 是字节流通向字符流的桥梁

OutputStreamWriter 是字符流通向字节流的桥梁

转换流可以将字节转成字符,原因在于,将获取到的字节通过查编码表获取到指定对应字符。

转换流的最强功能就是基于 字节流 + 编码表 。没有转换,没有字符流

6.打印流

PrintWriter

PrintStream

注:

A:只操作目的地,不操作数据源

B:可以操作任意类型的数据

C:如果启用了自动刷新,在调用println(),printf(),format()方法的时候,能够换行并刷新

D:可以直接操作文件

7.序列化流

ObjectOutputStream序列化流

ObjectInputStream反序列化流

序列化:把对象作为一个整体按照流一样的方式传输或者存储。

反序列化:把网络中的流数据或者文件中的流数据还原成对象

主要方法有:

1.Object readObject();该方法抛出异常:ClassNotFountException。

2. void writeObject(Object):被写入的对象必须实现一个接口:Serializable,否则就会抛出:NotSerializableException

3.如果实现了该接口,想解决黄线问题就生成一个随机的serialVersionUID号码

8.综合小案例:键盘录入数据保存到文件中

public class InputStreamReaderDemo {

public static void main(String[] args) throws IOException {

//创建键盘录入

InputStream is=System.in;

//将字节流转换为字符流

InputStreamReader isr=new InputStreamReader(is);

//高效字符流读取数据

BufferedReader br=new BufferedReader(isr);

//打印流写入数据,第一个true表示如果文件中有内容就追加数据,第二个true表示启用自动刷新

PrintWriter pw=new PrintWriter(new FileWriter("a.txt",true),true);

String line=null;

while((line=br.readLine())!=null){

if("over".equals(line)){

break;

}

//PrintWriter启用自动刷新

pw.println(line);

}

pw.close();

br.close();

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

1.流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。 2.IO流的分类 IO流分为字符流和字节流. 3.字节流和字符流的区别 1.字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。 2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。 4.通过代码体现IO流中各种流的方法的使用 1.用普通字节流复制a文件的内容到b文件中 public class CopyFileDemo { public static void main(String[] args) throws IOException { FileInputStream fis=new FileInputStream("a.txt"); FileOutputStream fos=new FileOutputStream("b.txt"); //方式一:一次读取写入单个字节 int i=0; while((i=fis.read())!=-1){ fos.write(i); } fos.close(); fis.close(); //方式二:一次读取写入一个字节数组 byte[] by=new byte[1024]; int len=0; while((len=fis.read(by))!=-1){ fos.write(by,0,len); } fos.close(); fis.close(); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2.使用高效字符流复制文件 public class CopyFileDemo3 { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new FileReader("a.txt")); //如果d文件中有数据,true表示继续往文件中追加数据 BufferedWriter bw=new BufferedWriter(new FileWriter("d.txt",true)); String line=null; //高效字符输入流的特有方法readline(),每次读取一行数据 while((line=br.readLine())!=null){ bw.write(line); //高效字符输出流的特有方法newline() bw.newLine(); //将缓冲区中的数据刷到目的地文件中 bw.flush(); } //关闭流,其实关闭的就是java调用的系统底层资源。在关闭前,会先刷新该流。 bw.close(); br.close(); } } 注: a.高效流不能直接对文件进行操作,必须通过普通流操作.高效流是从输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了 b.字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的,并且可以使用flush方法强制进行刷新缓冲区 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 5.转换流 InputStreamReader 是字节流通向字符流的桥梁 OutputStreamWriter 是字符流通向字节流的桥梁 转换流可以将字节转成字符,原因在于,将获取到的字节通过查编码表获取到指定对应字符。 转换流的最强功能就是基于 字节流 + 编码表 。没有转换,没有字符流 6.打印流 PrintWriter PrintStream 注: A:只操作目的地,不操作数据源 B:可以操作任意类型的数据 C:如果启用了自动刷新,在调用println(),printf(),format()方法的时候,能够换行并刷新 D:可以直接操作文件 7.序列化流 ObjectOutputStream序列化流 ObjectInputStream反序列化流 序列化:把对象作为一个整体按照流一样的方式传输或者存储。 反序列化:把网络中的流数据或者文件中的流数据还原成对象 主要方法有: 1.Object readObject();该方法抛出异常:ClassNotFountException。 2. void writeObject(Object):被写入的对象必须实现一个接口:Serializable,否则就会抛出:NotSerializableException 3.如果实现了该接口,想解决黄线问题就生成一个随机的serialVersionUID号码 8.综合小案例:键盘录入数据保存到文件中 public class InputStreamReaderDemo { public static void main(String[] args) throws IOException { //创建键盘录入 InputStream is=System.in; //将字节流转换为字符流 InputStreamReader isr=new InputStreamReader(is); //高效字符流读取数据 BufferedReader br=new BufferedReader(isr); //打印流写入数据,第一个true表示如果文件中有内容就追加数据,第二个true表示启用自动刷新 PrintWriter pw=new PrintWriter(new FileWriter("a.txt",true),true); String line=null; while((line=br.readLine())!=null){ if("over".equals(line)){ break; } //PrintWriter启用自动刷新 pw.println(line); } pw.close(); br.close(); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
经验分享 程序员 微信小程序 职场和发展