2021-04-27

Java-IO流

IO常用类:File、RandomAccessFile、InputStream、OutputStream、Reader、Writer。

  1. File:对文件及其目录的操作,比如说改目录,找路径,改文件名等;
  2. RandomAccessFile:就是随机文件操作,直接就继承了object,能对文件的任意位置进行存取;
  3. Input/OutputStream:节输入输出流,相当于是所有输入输出流的父类,就相当于是包含字符流;
  4. Reader/Writer:字符输入输出流,这里,就是单针对对字符的操作。当需要输入输出字符时就选择R/W。非字符类型的输入输出,例如图片则需使用Input/OutputStream;

一.流的概念:

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。它的特性是进行数据传输;

例如从水源地长江把水导入自来水厂,然后又从自来水厂把水送到各家各户。从长江到自来水厂之间的管道我们可以称之为输入流,从自来水厂把水送到各家各户的管道我们称之为输出流,我们大概可以这么理解。

二.流的继承体系

在java中,为了对不同来源和性质的流对象调用统一的方法,java中的流首先定义了顶层输入/输出流的接口或抽象类,这样不同性质具体的流对象就会有统一的调用方法以便使用,在使用流对象时,尽量的按照在具体流所实现的接口(抽象类)中定义的方法使用。

三.流的分类

流按照流向数据流向可以分为输入流和输出流。

流按照处理数据类型的单位不同可以分为字节流和字符流。

四.字节流和字符流

字节流:InputStreamOutputStream是java中可以按照最小字节单位读取的流,即每次读写一个字节,字节流是直接连接到输入源的流。

字符流:是以字符为单位进行数据处理的IO流。本质其实就是基于字节流读取时,去查找指定的码表。

字节流与字符流之间的区别:

1.读写单位不同:字节流式以字节(8位2进制)为单位,字符流是以字符为单位,根据码表映射字符,一次可能读多个字节。

2.处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

3.一次读入或读出是8位二进制。

4.字符流:一次读入或读出是16位二进制。

结论:只要是纯文本数据优先使用字符流,除此之外都使用字节流。

五.输入流和输出流的用途

输入流是指程序从数据源中读取数据。只进行读操作;

输出流是指将数据从程序中写到指定的文件中;

节点流:直接与数据相连,进行数据的读写;

处理流:是指在节点流上套接了一层。

常用的节点流

1.文 件 :FileInputStream 、 FileOutputStrean 、FileReader 、FileWriter 文件进行处理的节点流

2.数 组 :ByteArrayInputStream、 ByteArrayOutputStream、 CharArrayReader 、CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)

3.字符串 :StringReader、 StringWriter 对字符串进行处理的节点流

4.管 道 :PipedInputStream 、PipedOutputStream 、PipedReader 、PipedWriter 对管道进行处理的节点流

常用的处理流

1.缓冲流:BufferedInputStrean 、BufferedOutputStream、 BufferedReader、 BufferedWriter 增加缓冲功能,避免频繁读写硬盘。

2.转换流:InputStreamReader 、OutputStreamReader实现字节流和字符流之间的转换。

3.数据流: DataInputStream 、DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来。

输入流

主要包括FileInputStream、ByteArrayInputStream、PipedInputStream、FilterInputStream;

方法:

  1. read():读取一个字节并将其返回成int值,到输入流尾的时候返回-1;
  2. read(byte[] buffer):读取最大值一直到达缓冲区长度,返回在缓冲区读取的字节数,到输入流的尾返回-1;
  3. read(byte[] buffer, int offset, int length):读取到指定长度的字节,数据从偏索引开始写入缓冲区;
  4. close():关闭输入流;
  5. available():返回可以从此输入流读取但不阻塞的估计字节数(即相当于是最大流量);

文件输入流

缓冲输入流

顾名思义就是给数据一个缓冲区间,起到维护内部储存的一个缓冲区来存储输入流读取的字节。

数据输入流

用来读取输入流中的数据对应在Java中的基本数据类型值。

输出流

主要方法:

  1. write():将字节写入输出流中;
  2. flush():将缓冲区的字节刷新到数据库;
  3. close():关闭输出流;

文件输出流

数据输出流

DataOutputStream:将Java基本类型数据写入输出流。

管道

相当于是输入流和输出流的连接器。

PipedOutputStream对象表示一端,PipedInputStream对象表示另一端,然后通过connect方法将其连接起来。在操作时可以先连接管道的两端后生成和使用数据,通过使用PipedOutputStream对象的一个​​write()方法产生数据。无论对管道输出流写入什么,自动变得可用于管道输入流对象进行读取。使用PipedInputStream的read()方法从管道读取数据。如果数据在尝试从管道读取时不可用,则管道输入流被阻止。管道流具有固定容量的缓冲器,以在写入管道和从管道读取之间存储数据。在使用时可以设置管道容量,当我们创建它。如果管道的缓冲区已满,则尝试在管道上写入将被阻止。

缓冲区

缓冲区是固定长度的数据容器。有一个单独的缓冲区类型来保存每种类型的基本值的数据,除了布尔类型值。缓冲区是程序中的一个对象。有一个单独的类来表示每种类型的缓冲区。

缓冲区属性

以下是缓冲区的四个重要属性。

  • Capacity
  • Position
  • Limit
  • Mark

缓冲区的容量是它可以容纳的元素的最大数量。并且当创建缓冲器时它是固定的。

我们可以通过调用hasArray()方法检查缓冲区是否由数组支持,如果缓冲区由数组支持则返回true。

我们可以通过使用缓冲对象的array()方法来访问支持数组。

一旦我们访问了后台数组,对该数组所做的任何更改都将反映在缓冲区中。

缓冲区具有返回其容量的capacity()方法。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值