彻底明白Java语言中的IO系统

彻底明白Java语言中的IO系统,第1张

彻底明白Java语言中的IO系统,第2张

Java的核心库Java.io提供了全面的io接口,包括文件读写、标准设备输出等等。在Java IO中,I/O是基于流的输入和输出,所有数据都被序列化到输出流中或者从输入流中读入。在具体使用中,很多初学者对Java.io包的使用非常模糊。本文将详细讲解Java.io的使用方法。

Java的核心库Java.io提供了全面的io接口,包括文件读写、标准设备输出等等。在Java IO中,I/O是基于流的输入和输出,所有数据都被序列化到输出流中或者从输入流中读入。在具体使用中,很多初学者对Java.io包的使用非常模糊。本文将详细讲解Java.io的使用方法。

一.投入和产出

1.stream表示能够产生数据的任何数据源,或者能够接收数据的任何接收源。在Java的IO系统中,所有的流(包括输入和输出流)包括两种类型:

1.1面向字节的流

面向字节的流意味着信息是以字节为单位从流中读取或写入的。面向字节的流包括以下类型:

投入

流:

1) ByteArrayInputStream:使用内存中的缓冲区作为InputStream。

2) StringBufferInputStream:使用String对象作为InputStream。

3) FileInputStream:使用一个文件作为InputStream来读取该文件。

4) PipedInputStream:实现了管道的概念,主要用于线程。

5) SequenceInputStream:将多个InputStream合并成一个InputStream。

在外

溪流

1) ByteArrayOutputStream:将信息存储在内存的缓冲区中。

2) FileOutputStream:将信息存储在文件中。

3) PipedOutputStream:实现了管道的概念,主要用在线程中。

4) SequenceOutputStream:将多个输出流合并成一个输出流

1.2面向Unicode字符的流

面向Unicode字符的流意味着以Unicode字符为单位从流中读取信息或将信息写入流中。面向Unicode字符的流包括以下类型:

投入

溪流

1) CharArrayReader:对应ByteArrayInputStream

2) StringReader:对应于StringBufferInputStream

3) FileReader:对应FileInputStream

4) PipedReader:对应于PipedInputStream

在外

溪流

1) CharArrayWrite:对应ByteArrayOutputStream。

2) StringWrite:没有与之对应的面向字节的流。

3) FileWrite:对应于FileOutputStream

4) PipedWrite:对应于PipedOutputStream

面向字符的流基本上都有对应的面向字节的流。对应的两个类功能相同,但是单词在操作上有不同的指向。例如,CharArrayReader:和ByteArrayInputStream都使用内存中的缓冲区作为InputStream。区别在于前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。

1.3两个非面向当前的流之间的转换

InputStreamReader和OutputStreamReader:将面向字节的流转换为面向字符的流。

2.流添加属性

2.1“向流添加属性”的作用

利用上面介绍的Java中操作IO的API,我们可以完成任何我们想要的操作。但是通过FilterInputStream和FilterOutStream的子类,我们可以给流添加属性。下面举个例子来说明这个函数的作用。

如果我们想将数据写入文件,我们可以这样做:

file out stream fs = new file out stream(" test . txt ");

然后可以通过生成的fs对象调用write()函数,将数据写入test.txt文件以及从该文件中读取数据。但是,如果要实现“先在内存中缓存要写入文件的数据,再将缓存的数据写入文件”的功能,上述API没有一个能满足我们的需求。但是通过FilterInputStream和FilterOutStream的子类,我们为FileOutStream添加了我们需要的函数。

2.2各种类型的filterinputstream

2.2.1用于封装面向字节的输入流

1) DataInputStream:读取基本类型(int,char等。)来自流的数据。

2) BufferedInputStream:使用缓冲

3) LineNumberInputStream:会记录输入流的行数,然后可以调用getLineNumber()和setLineNumber(int)。

4) PushbackInputStream:很少使用,一般用于编译器开发。

2.2.2用于封装面向字符的InputStream。

1)没有对应于DataInputStream的类。除非您想使用readLine()而不是BufferedReader,否则请使用DataInputStream。

2) BufferedReader:对应BufferedInputStream

3) LineNumberReader:对应于LineNumberInputStream

4)推回阅读器:对应推回输入流

2.3各种类型的过滤器出口流

2.2.3用于封装面向字节的OutputStream。

1) dataiostream:输出基本类型(int,char等。)数据到流中。

2) BufferedOutStream:使用缓冲区

3) PrintStream:生成打印格式

2.2.4用于封装面向字符的OutputStream。

1) BufferedWrite:对应于

2) PrintWrite:对应于

3.RandomAccessFile

1)可以通过RandomAccessFile对象读写文件。

2)生成对象时,可以指明要打开的文件的性质:r,只读;w,只写;Rw可以读写

3)可以直接跳转到文件中的指定位置。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 彻底明白Java语言中的IO系统

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情