JAVA中的IO流系列

IO流英文全称:Input/Output即输入/输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出。

比如U盘、移动硬盘,当我们将其插入电脑的 usb 硬件接口时,我们就可以从电脑中读取设备中的信息或者写入信息,这个过程就涉及到 I/O 的操作。

当然,涉及 I/O 的操作,也不仅仅局限于硬件设备的读写,还有网络数据的传输。比如,我们在电脑上用浏览器搜索互联网上的信息,这个信息的过程也涉及到 I/O 的操作。

无论是从磁盘中读写文件,还是在网络中传输数据,可以说 I/O 主要为处理人机交互、机与机交互中获取和交换信息提供的一套解决方案。

基于磁盘操作的 I/O 接口:File;基于网络操作的 I/O 接口:Socket。

从传输格式角度看,可以分两类:字节流和字符流。它们都是抽象类。

  • 基于字节的输入和输出操作接口分别是:InputStream 和 OutputStream。
  • 基于字符的输入和输出操作接口分别是:Reader 和 Writer 。

字节流

字节流,是 I/O 流中最底层的流,能处理任何类型的数据传输,比如文字、图片、视频、文件等。

无论是输入还是输出,操作数据的方式可以组合使用,各个处理流的类并不是只操作固定的节点流,比如如下输出方式:

//将文件输出流包装到序列化输出流中,再将序列化输出流包装到缓冲中;
OutputStream ops =  new BufferedOutputStream(new ObjectOutputStream(new FileOutputStream(new File("fileName"))));

字符流

不管是磁盘还是网络传输,最小的存储单元都是字节,而不是字符,所以 I/O 操作的都是字节而不是字符

那为什么要有操作字符的 I/O 接口呢?

这是因为我们的程序中通常操作的数据都是字符形式,使用字节流操控文字时不是很方便,容易乱码,由此诞生了不同的字符集以及对应的字符编码规则!不同的字符集,占用的字节位数不同,以中文为例,在GBK编码规则中,一个中文使用二个字节存储;而在UTF-8编码规则中,一个中文使用三个字节存储,如果写入和读取的编码规则不一样,很容易出现乱码。

字节与字符的转化,其中,InputStreamReaderOutputStreamWriter就是转化流。

文件接口File

File 类定义了一些与平台无关的方法来操作文件,包括检查一个文件是否存在、创建、删除文件、重命名文件、判断文件的读写权限是否存在、设置和查询文件的最近修改时间等等操作。

 Java 中通常的 File 并不代表一个真实存在的文件对象,当你通过指定一个路径描述符时,它就会返回一个代表这个路径相关联的一个虚拟对象,这个可能是一个真实存在的文件或者是一个包含多个文件的目录。

网络接口Socket

Socket 可以比作为两个城市之间的交通工具,有了它,就可以在城市之间来回穿梭了,大部分情况下我们使用的都是基于 TCP/IP 的流套接字,它是一种稳定的通信协议。

主机 A 的应用程序要想和主机 B 的应用程序通信,必须通过 Socket 建立连接,而建立 Socket 连接必须需要底层 TCP/IP 协议来建立 TCP 连接。TCP 协议采用了三次握手策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值