IO流

为什么有IO流?

IO流的产生

数据要传输,必定就有输入端和输出端,也就是数据的读入和数据的读出。Java中数据分为基本数据类型和引用类型,基本类型就是字节,任何数据都可以用字节来传输,也就是字节流,可是这个过程中有可能会发生乱码,因为读取的时候可能只读取了一个字节(比如:中文,1个中文是两个字节),也就是半个字符,导致了乱码,因此新出现了字符流,专门用于处理字符的。

从此,化为两道,字节流和字符流
字节流继承自InputStream、OutputStream
字符流继承自 Reade、Writer

IO流功能和作用

主要是方便数据 的传输 不同设备之间的数据传输
在如下地方均可传输
硬盘:File 键盘:System.in 内存:数组 网络 : Socket流

什么是IO流?


形象化的比喻

(1)我们知道,每个人家里喝的水都是从自来水厂来的,自来水厂的水又是从水源地来的
(2)水是通过水管来的
(3)那么这当中的水流,便可以理解为IO流。

Java中的IO流
在这里插入图片描述

(1)在java中,java就是自来水厂,水源地就是源,家就是目的
(2)对于自来水厂当做参照物来说,从水源地流到我自来水厂的水,是从外面进来的,那么水是输入进来的。(输入)
从自来水厂到家的水,是从自来水厂流出的(输出)。
对于java程序来说,也是一样的,从源地到我java中的流,便是输入流(InputStream),而从我java中流出的便是输出流(OutputStream)
(3)那么你已经知道什么是输入流(InputStream)和输出流(OutputStream)了。

Java的IO模型设计非常优秀,它使用Decorator(装饰者)模式,按功能划分Stream,您可以动态装配这些Stream,以便获得您需要的功能。 例如,您需要一个具有缓冲的文件输入流,则应当组合使用FileInputStream和BufferedInputStream。

IO流分类?

在这里插入图片描述
字节流
在这里插入图片描述
如果是文件的操作,则带file
字符流
在这里插入图片描述
BufferedReader BufferedWriter

缓冲区
在这里插入图片描述
(1)当我们需要水的时候,那么一个储水池能够更好的满足我们,能够让我们想要水就有水。提高的水到效率
(2).java中的这个储水池叫做缓冲区,(Buffered?)一个用于特定基本类型数据的容器。
那么这个(问号)?是什么意思呢?我们知道储水池有很多种类型的,那么java中的缓冲区自然也有很多种类型的,例如以下最常用的
在这里插入图片描述
我们已经知道的InputStream是输入流,那么BufferedInputStream就是输入流的缓冲区了;同样,那么OutputStream是输出流,那么BufferedOutputStream就是输出流的缓冲区了;

转换流
在这里插入图片描述
是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写
(1)同样的 ,java中的转换流,相当于过滤器,是一种对数据进行编码,改变格式的存储;如下:
可以将字符以指定编码格式存储。
可以对文本数据指定编码格式来解读
指定编码表的动作由构造函数完成
(2)分为InputStreamReader OutputStreamWriter
使用: InputStreamReader isr = new InputStreamReader(is, “gbk”);
使用: OutputStreamWriter osw = new OutputStreamWriter(os, “ISO-8859-1”);

参考:https://www.cnblogs.com/xiaoshen666/p/11118864.html

IO流选择?

1、首先自己要知道是选择输入流还是输出流,这就要根据自己的情况而定,如果你想从程序写东西到别的地方,那么就选择输出流,反之用输入流
2、然后考虑你传输数据时,是选择使用字节流传输还是字符流,也就是每次传1个字节还是2个字节,有中文肯定就选择字 符流了。
3、明确具体设备
硬盘:File 键盘:System.in 内存:数组 网络 : Socket流
4、是否需要额外功能
A)高效缓冲 buffer
B)字节字符流之间转换
字节转字符流 InputStreamReader
字符转字节流 OutputStreamWriter
可以参考: https://www.cnblogs.com/penghuster/p/4869153.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值