java--IO流-(一)

举报
brucexiaogui 发表于 2021/12/30 01:23:33 2021/12/30
【摘要】 java--IO流-(一)   一、什么是数据流   数据流是一串连续不断的数据的集合,就像水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.数据写入程序可以使一段一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流. 二、Java I/O  ...

java--IO流-(一)

 

一、什么是数据流

 

  • 数据流是一串连续不断的数据的集合,就像水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.
  • 数据写入程序可以使一段一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流.

二、Java I/O

 

  • 在程序中所有的数据都是以流的方法进行传输和保存的。
  • Java 的IO是实现输入和输出的基础。
  • Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入输出功能。
  • 输入和输出是一个相对的概念,我们一般站在程序的角度来分析和处理问题的。

 

 

  1. 程序需要数据 --> 读进来    --> 输入
  2. 程序保存数据 --> 写出去    --> 输出

 

 

三、流的分类

从不同角度分类:

  • 按流动方向的不同可以分为输入流和输出流;
  • 按处理数据的单位不同分为字节流和字符流;
  • 按功能的不同可分为节点流和处理流;

 

 

 

  1.  节点流:直接操作目标设备,例如:磁盘或一块内存区域。
  2.  处理流:通过操作节点流,从而间接完成输入或输出功能的流。处理流是的存在是建立在一个已经存在的输入流或输出流的基础之上的。

 

 

 

所有流都继承于以下四种抽象流类型的某一种:

流的大家族:

四、操作流的步骤

 

  • File类本身是与文件操作有关,但是如果要想操作内容则必须使用字节流或字符流完成,但是不管是使用何种的输入输出流,其基本的操作原理是一样的(以文件流为准):

 

 

 

 

  1. 使用File类找到一个文件对象,得到IO操作的源或目标
  2. 通过字节流或字符流的子类创建对象,(得到IO操作的通道)
  3. 进行读或写的操作,(IO操作)
  4. 关闭输入/输出,(打完收工,注意节约资源,关掉)

 

 

 

 

  • 由于流的操作属于资源操作,所以在操作的最后一定要关闭以释放资源。

五、字节流和字符流区别

 

  • 二者仅仅是操作单位不一样。
  • InputStream和Reader是所有输入流的基类,他们都是抽象类,本身不能创建实例,但是他们是所有输入流的模板。
  • 一般来说处理字符或字符串时使用字符流,处理字节或二进制对象时应使用字节流;
  • 字节流和字符流在使用上的代码结构都是非常类似的,但是其内部本身也是有区别的,因为在进行字符流操作的时候会使用到缓冲区,而字节流操作的时候是不会使用到缓冲区的。
  • 在输出的时候,OutputStream类即使最后没有关闭内容也可以输出。但是如果是Writer的话,则如果不关闭,最后一条内容是无法输出的,因为所有的内容都是保存在了缓冲区之中,每当调用了close()方法就意味着清空缓冲区了。那么可以证明字符流确实使用了缓冲区:
  • 字节流:程序 → 文件
  • 字符流:程序 → 缓冲区 → 文件
  • 如果现在字符流即使不关闭也可以完成输出的话,则必须强制性清空缓冲区:
  • 方法:public void flush() throws IOException
  • 两者相比,肯定使用字节流更加的方便,而且在程序中像图片、MP3等都是采用字节的方式的保存,那么肯定字节流会比字符流使用的更广泛。
  • 但是需要说明的是,如果要是想操作中文的话,字符流肯定是最好使的。

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/80048147

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。