彻底明白Java语言中的IO系统
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)可以直接跳转到文件中的指定位置。
位律师回复
0条评论