“
人生苦短,不如养狗
”
一、概要
在日常开发过程中,相比Java集合、线程以及并发相关的热门类库,Java I/O的使用频率应该是相对较少的,尤其是在没有文件操作类需求的情况下。毕竟能够用集合来处理数据,何必要通过输入/输出流的方式进行处理呢?
由于使用的频率确实略低且JDK自带的IO类库又相当的繁复,使用起来不像集合或者并发类库那么容易,导致学了忘,忘了学,根本停不下来。但对于任何一种语言来说,IO类库必定是其重要的组成部分之一,所以我们单独开一个系列来对Java I/O做一个整理,也可以说是做一个速记笔记,方便后续使用时进行查阅。
二、从基本概念开始
1. 什么是Java I/O
Java I/O是jdk提供的用于进行数据资源读取和写入的一组API(注意,本系列当中涉及到的所有类都可以在 java.io
包中当中找到)。其中,根据类型不同可以将数据资源分为一下几类:
-
字节/字符数组(内存缓冲区) -
文件 -
管道 -
网络资源 -
系统输入/输出(来自外设的输入/输出)
为了对上述数据资源进行读取和写入,Java I/O提出了 流 的概念,通过I/O流来和对应的数据资源进行交互。
对于Java小白来说,初次接触流这样一个概念还是略有点难理解的,这里我们可以对照日常生活中的水流来进行理解。在我们观察水流时会发现这样两个特性:
-
方向性
:水流必定是从一个方向流入另一个方向,不可能存在同时有两个方向的水流; -
载物性
:水流当中会承载着树叶、鱼虾等事物;
同样的I/O流同样存在着这两种特性,但略有不同。
在方向性方面,I/O流的一端必定连接着需要读取或者写入的数据资源。通过 Input 和 Output ,Java I/O指明了I/O流的流向:
-
Input
:对于Input而言,数据资源为来源,程序或目标空间为输出,此时数据流向决定了当前操作为读数据操作; -
Output
:对Output而言,程序或者其他数据资源为来源,目标数据资源为输出,此时数据流向决定了当前操作为写数据操作;
在载物性方面,I/O流承载的是字符或者是字节数据。根据I/O流承载的数据以及数据资源的类型不同,Java I/O提供如下的对象进行处理:
2. 网络资源和本地资源的区别
其实从上面关于数据资源的分类当中我们可以看到,除了网络资源以外,其余所有的数据资源都可以归类到本地资源当中。
对于本地资源、Java I/O可以使用系统调用来完成对应资源的访问操作,但是对于网络资源来说,处理上会更加复杂。针对网络资源,I/O流需要通过网络通信来访问远程的数据资源。由于网络存在不确定性以及网络协议的不同,针对不同的场景又衍生出和访问本地资源完全不同的I/O模型,在后续的章节中我们会具体讨论这些I/O模型。
三、总结
本章节主要是给初次接触Java I/O或者反复学反复忘的同学进行一个概括性的介绍,其中着重点出了Java I/O当中较为重要的 流 的概念,下一章将会对数据资源作进一步的介绍。
原文始发于微信公众号(Brucebat的伪技术鱼塘):那些你学了又忘的Java IO(一):总览
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/90081.html