行业资讯
【南京开发培训】Java开发的输出和输入流
2019-10-31

在java的语言中所以的所有数据都是使用流读写的。那么什么是流呢?

 


 

      流是一组有序的数据序列,将数据从一个地方带到另一个地方。根据数据流向的不同,可以分为输入(Input)流和输出(Output)流两种。输入就是将数据从各种输入设备(包括文件、键盘等)中读取到内存中,输出则正好相反,是将数据写入到各种输出设备(比如文件、显示器、磁盘等)。例如键盘就是一个标准的输入设备,而显示器就是一个标准的输出设备,但是文件既可以作为输入设备,又可以作为输出设备。

 

数据流的处理只能按照数据序列的顺序来进行,即前一个数据处理完之后才能处理后一个数据。数据流以输入流的形式被程序获取,再以输出流的形式将数据输出到其他设备。图 1 所示的是输入流模式,图 2 所示的是输出流模式。

 

 

 

输入流

Java 流功能相关的类都封装在 java.io 包中,而且每个数据流都是一个对象。有输入流类都是InputStream 抽象类(字节输入流)和 Reader 抽象类(字符输入流)的子类。其中 InputStream 类是字节输入流的抽象类,是所有字节输入流的父类,其层次结构如图 3 所示。

 

 

 

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 类,该类是字符输入流的抽象类,即所有字输入流的实现都是它的子类。

Reader类的具体层次结构如图 4 所示.

 

 

 

Reader类常用方法如下:

Ø public int read(java.nio.CharBuffer target):读取字节到字符缓存中。

Ø public int read():读取单个字符。

Ø public int read(char cbuf[]):读取字符到指定的 char 数组中

Ø abstract public int read(char cbuf[], int off, int len):从 off 位置读取 len 长度的字符到 char 数组中

Ø public long skip(long n):跳过指定长度的字符数量。

Ø public boolean ready():和上面的 available() 方法类似

Ø public boolean markSupported():判断当前流是否支持标记流。

Ø public void mark(int readAheadLimit):标记读取位置,下次还可以从这里开始读取,使用前要看当前流是否支持,可以使用 markSupport() 方法判断

Ø public void reset():重置读取位置为上次 mark 标记的位置

Ø abstract public void close():关闭流释放相关资源。

 

 

 

输出流

在 Java 中所有输出流类都是 OutputStream 抽象类(字节输出流)和 Writer 抽象类(字符输出流)的子类。其中 OutputStream 类是字节输出流的抽象类,是所有字节输出流的父类,其层次结构如图 5 所示。

 

 

 

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

Ø int write (b):将指定字节的数据写入到输出流。

Ø int write (byte[] b):将指定字节数组的内容写入输出流。

Ø int write (byte[] b,int off,int len):将指定字节数组从 off 位置开始的 len 字芳的内容写入输出流。

Ø close():关闭数据流,当完成对数据流的操作之后需要关闭数据流。

Ø flush():刷新输出流,强行将缓冲区的内容写入输出流。

 

 

字符输出流的父类是 Writer,其层次结构如图 6 所示。

 

 


 

 

6 Writer类的层次结构图

Writer类常用方法如下:

Ø public void write(int c):写入一个字符。

Ø public void write(char cbuf[]):写入一个字符数组。

Ø abstract public void write(char cbuf[], int off, int len):从字符数组的 off 位置写入 len 数量的字符

Ø public void write(String str):写入一个字符串。

Ø public void write(String str, int off, int len):从字符串的 off 位置写入 len 数量的字符

Ø public Writer append(CharSequence csq):追加吸入一个字符序列。

Ø public Writer append(CharSequence csq, int start, int end):追加写入一个字符序列的一部分,从start 位置开始,end 位置结束

Ø public Writer append(char c):追加写入一个 16 位的字符

Ø abstract public void flush():强制刷新,将缓冲中的数据写入。

Ø abstract public void close():关闭输出流,流被关闭后就不能再输出数据了。

 

下面就对常用子类使用进行代码演示说明:

(未完待续……)

 

 

下面给大家分享一下正厚软件对于软件测试的进阶课程大纲:

 

    2019正厚软件软件测试课程要点及大纲

 

2019正厚软件IT职能培训网报方式

 

如果需要详细了解试听或培训课程费用可留下 姓名+联系方式(手机号或微信号),我们会在第一时间为您解答服务!

 

软件测试零基础班

软件测试周末精品班

java开发班

ISTQB考试班

 

更多资讯尽在官方网站

www.njzhenghou.com

咨询热线
预约试听:025-86665061
官方公众号:ZhenghouSoft
技术热线:025-86665061
联系地址
南京总部:南京市鼓楼区湖南路16号5楼
重庆中心:重庆市渝中区投资大厦6楼
武汉中心:江夏区光谷智慧园16栋
微信公众号
联系我们
咨询热线:025-86665061
友情链接
Copyright © 2018 南京|重庆|武汉 专注软件测试培训、ISTQB考证、项目合作、Java开发-正厚软件官网,值得信赖 苏ICP备17057415号