Java笔记(day20-22)

IO流体系详解
本文深入讲解了Java IO流体系,包括输入流、输出流、字节流、字符流的概念及应用,探讨了缓冲区如何提高流操作效率,以及字符流与字节流之间的转换方式。此外,还详细介绍了常见流对象如FileReader、FileWriter、BufferedReader等的使用场景。

IO流:

输入流、输出流

字节流、字符流:为了处理文字数据方便而出现的对象。

(其实这些对象的内部使用的还是字节流(因为文字最终也是字节数据,只不过,通过字节流读取了相对应的字节数,没有对这些字节直接操作,

而是去查了指定的(本机默认的)编码表,获取到了对应的文字。)

 

字符流就是 字节流+编码表。

 

缓冲区:提高效率的,提高谁的效率?提高流的操作数据的效率。

所以创建缓冲区之前必须先有流。

缓冲区的基本思想:其实就是定义容器将数据进行临时存储。

对于缓冲区对象,其实就是将这个容器进行了封装,并提供了更多高效的操作方法。

 

缓冲区可以提高流的操作效率。

 

Writer

|--TextWriter

|--MediaWriter

Writer

|--TextWriter write:往目的地

|--BufferTextWriter write:往缓冲区写

|--MediaWriter

|--BufferMediaWriter

 

想要写一些其他数据。就会子类。DataWriter,为了提高其效率,还要创建该类的子类。BufferDataWriter

Writer

|--TextWriter write:往目的地

|--BufferTextWriter write:往缓冲区写

|--MediaWriter

|--BufferMediaWriter

|--DataWriter

|--BufferDataWriter

 

Writer

|--TextWriter

|--MediaWriter

|--BufferWriter

|--DataWriter

 

独立完成缓冲区的建立

 

原理;

1,使用流的read方法从源中读取一批数据存储到缓冲区的数组中。

2,通过计数器记录住存储的元素个数。

3,通过数组的角标来获取数组中的元素(从缓冲区中取数据).

4,指针会不断的自增,当增到数组长度,会归0.计数器会自减,当减到0时,就在从源拿一批数据进缓冲区。

 

 

内容补足:

MyBufferedReader

LineNumberReader :可以定义行号。

---------

字符流:

FileReader

FileWriter

 

BufferedReader

BufferedWriter

 

字节流:

InputStream OutputStream

 

操作文件的字节流对象。

FileOutputStream

FileInputStream

BufferedOutputStream

BufferedInputStream

 

字符流和字节流之间的转换动作。

转换流:

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"gbk");

FileReader fr = new FileReader("a.txt");

 

 

FileWriter fw = new FileWriter("b.txt");

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"));

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"gbk");

 

转换流:字节流+编码表。

转换流的子类:FileReaderFileWriter:字节流+本地默认码表(GBK)

 

如果操作文本文件使用的本地默认编码表完成编码。可以使用FileReader,或者FileWriter。因为这样写简便。

如果对操作的文本文件需要使用指定编码表进行编解码操作,这时必须使用转换流来完成。 

IO流的操作规律总结:

 

1,明确体系:

数据源:InputStream Reader

数据汇:OutputStreamWriter

 

2,明确数据:因为数据分两种:字节,字符。

数据源:是否是纯文本数据呢?

是:Reader

否:InputStream

 

数据汇:

是:Writer

否:OutputStream

 

3,明确设备:

数据源:

键盘:System.in

硬盘:FileXXX

内存:数组。

网络:socket  socket.getInputStream();

 

数据汇:

控制台:System.out

硬盘:FileXXX

内存:数组

网络:socket socket.getOutputStream();

 

4,明确额外功能:

1,需要转换,使用转换流。InputStreamReader OutputStreamWriter

2,需要高效,使用缓冲区。Buffered

转载于:https://www.cnblogs.com/wanggang521/p/10998523.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值