那些你学了又忘的Java IO(一):总览

那些你学了又忘的Java IO(一):总览

人生苦短,不如养狗

一、概要

  在日常开发过程中,相比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流的一端必定连接着需要读取或者写入的数据资源。通过 InputOutput ,Java I/O指明了I/O流的流向:

  • Input :对于Input而言,数据资源为来源,程序或目标空间为输出,此时数据流向决定了当前操作为读数据操作;
  • Output :对Output而言,程序或者其他数据资源为来源,目标数据资源为输出,此时数据流向决定了当前操作为写数据操作;

  在载物性方面,I/O流承载的是字符或者是字节数据。根据I/O流承载的数据以及数据资源的类型不同,Java I/O提供如下的对象进行处理:

那些你学了又忘的Java IO(一):总览

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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!