java流的概念,java输入输出流详解

KLQ 2020-08-18 16:28:22 java常见问答 4425

你知道什么是java流吗?java输入输出流又是什么呢?下面的文章要给大家介绍的就是这个方面的内容,一起来了解一下吧。

Java当中,所有的数据都是使用流读写的,流是一组有序的数据序列,将数据从一个地方带到另一个地方,根据数据流向的不同,可以分成输入(Input)流和输出(Output)流两种。

什么是输入输出流?

Java程序通过流来完成输入/输出,所有的输入/输出以流的形式处理,所以的话,要了解I/O系统,首先的话要理解输入/输出流的概念。

输入-将数据从各种输入设备(包括文件、键盘等)中读取到内存中。

输出-是将数据写入到各种输出设备(比如文件、显示器、磁盘等)。

数据流是Java进行I/O操作的对象,它依照不同的标准能够分成不同的类别。

数据流分类

数据流的处理只可以按照数据序列的顺序来进行,也就是,前一个数据处理完之后才可以处理后一个数据,数据流以输入流的形式被程序获取,再以输出流的形式将数据输出到其它设备。

输入流模式:

输入流模式

输出流模式:

输出流模式

输入流

Java流相关的类都封装在java.io包当中,并且,每个数据流都是一个对象,所有输入流类都是 InputStream抽象类(字节输入流)和Reader抽象类(字符输入流)的子类,在这当中InputStream类是字节输入流的抽象类,是所有字节输入流的父类。

层次结构:

层次结构

InputStream类当中,所有方法遇到错误时都会引发IOException异常,

下面是该类中包含的常用方法:

int read()-从输入流读入一个 8 字节的数据,将它转换成一个 0~ 255 的整数,返回一个整数,如果遇到输入流的结尾返回 -1;

int read(byte[] b)-从输入流读取若干字节的数据保存到参数 b 指定的字节数组中,返回的字节数表示读取的字节数,如果遇到输入流的结尾返回 -1;

int read(byte[] b,int off,int len)-从输入流读取若干字节的数据保存到参数b指定的字节数组中,其中off是指在数组中开始保存数据位置的起始下标,len是指读取字节的位数。返回的是实际读取的字节数,如果遇到输入流的结尾则返回 -1;

void close()-关闭数据流,当完成对数据流的操作之后需要关闭数据流;

int available()-返回可以从数据源读取的数据流的位数;

skip(long n)-从输入流跳过参数 n 指定的字节数目;

boolean markSupported()-判断输入流是否可以重复读取,如果可以就返回true;

void mark(int readLimit)-如果输入流可以被重复读取,从流的当前位置开始设置标记,readLimit指定可以设置标记的字节数;

void reset()-使输入流重新定位到刚才被标记的位置,这样可以重新读取标记过的数据;

上面最后3个方法一般会结合在一起使用,首先使用markSupported()判断,假如,可以重复读取,那么就使用mark(int readLimit)方法进行标记,标记完成之后可以使用read()方法读取标记范围内的字节数,最后使用reset()方法使输入流重新定位到标记的位置,继而完成重复读取操作。

Java当中的字符是Unicode编码,也就是双字节的,而InputerStream是用来处理单字节的,在处理字符文本时不是很方便,这时可以使用Java的文本输入流Reader类,该类是字符输入流的抽象类,也就是所有字符输入流的实现都是它的子类,该类的方法和InputerSteam类的方法类似。

输出流

在Java中所有输出流类都是 OutputStream 抽象类(字节输出流)和Writer 抽象类(字符输出流)的子类,其中OutputStream类是字节输出流的抽象类,是所有字节输出流的父类。

层次结构:

层次结构

OutputStream类是所有字节输出流的超类,用于以二进制的形式将数据写入目标设备,该类是抽象类,不能被实例化,OutputStream类提供了一系列跟数据输出有关的方法。

如下:

OutputStream类的常用方法

java流方面的一些内容就给你介绍到这里了,更多java入门知识,可以继续关注本站来进行了解哦。

推荐阅读:

java自定义注解详解

java元注解作用及使用详解

java @FunctionalInterface注解详解