彻底明白java的io系统

上传人:子 文档编号:45966799 上传时间:2018-06-20 格式:DOC 页数:8 大小:35.50KB
返回 下载 相关 举报
彻底明白java的io系统_第1页
第1页 / 共8页
彻底明白java的io系统_第2页
第2页 / 共8页
彻底明白java的io系统_第3页
第3页 / 共8页
彻底明白java的io系统_第4页
第4页 / 共8页
彻底明白java的io系统_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《彻底明白java的io系统》由会员分享,可在线阅读,更多相关《彻底明白java的io系统(8页珍藏版)》请在金锄头文库上搜索。

1、彻底明白彻底明白 JavaJava 的的 IOIO 系统系统一 Input 和 Output1. stream 代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在 Java 的 IO 中,所有的 stream(包括Input 和 Out stream)都包括两种类型:1.1 以字节为导向的 stream以字节为导向的 stream,表示以字节为单位从 stream 中读取或往stream 中写入信息。以字节为导向的 stream 包括下面几种类型:1) input stream:1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream

2、使用2) StringBufferInputStream:把一个 String 对象作为InputStream3) FileInputStream:把一个文件作为 InputStream,实现对文件的读取操作4) PipedInputStream:实现了 pipe 的概念,主要在线程中使用5) SequenceInputStream:把多个 InputStream 合并为一个InputStream2) Out stream1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中2) FileOutputStream:把信息存入文件中3) PipedOutputStrea

3、m:实现了 pipe 的概念,主要在线程中使用4) SequenceOutputStream:把多个 OutStream 合并为一个OutStream1.2 以 Unicode 字符为导向的 stream以 Unicode 字符为导向的 stream,表示以 Unicode 字符为单位从stream 中读取或往 stream 中写入信息。以 Unicode 字符为导向的stream 包括下面几种类型:1) Input Stream1) CharArrayReader:与 ByteArrayInputStream 对应2) StringReader:与 StringBufferInputStre

4、am 对应3) FileReader:与 FileInputStream 对应4) PipedReader:与 PipedInputStream 对应2) Out Stream1) CharArrayWrite:与 ByteArrayOutputStream 对应2) StringWrite:无与之对应的以字节为导向的 stream3) FileWrite:与 FileOutputStream 对应4) PipedWrite:与 PipedOutputStream 对应以字符为导向的 stream 基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,字是在操作时的导向不

5、同。如 CharArrayReader:和 ByteArrayInputStream 的作用都是把内存中的一个缓冲区作为 InputStream 使用,所不同的是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。1.3 两种不现导向的 stream 之间的转换InputStreamReader 和 OutputStreamReader:把一个以字节为导向的 stream 转换成一个以字符为导向的 stream。2. stream 添加属性2.1 “为 stream 添加属性”的作用运用上面介绍的 Java 中操作 IO 的 API,我们就可完成我们想完成的任何操作了。但通过

6、FilterInputStream 和 FilterOutStream 的子类,我们可以为 stream 添加属性。下面以一个例子来说明这种功能的作用。如果我们要往一个文件中写入数据,我们可以这样操作:FileOutStream fs = new FileOutStream(“test.txt”);然后就可以通过产生的 fs 对象调用 write()函数来往 test.txt 文件中写入数据了。但是,如果我们想实现“先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中”的功能时,上面的 API 就没有一个能满足我们的需求了。但是通过FilterInputStream 和 Filter

7、OutStream 的子类,为 FileOutStream添加我们所需要的功能。2.2 FilterInputStream 的各种类型2.2.1 用于封装以字节为导向的 InputStream1) DataInputStream:从 stream 中读取基本类型(int、char等)数据。2) BufferedInputStream:使用缓冲区3) LineNumberInputStream:会记录 input stream 内的行数,然后可以调用 getLineNumber()和 setLineNumber(int)4) PushbackInputStream:很少用到,一般用于编译器开发2

8、.2.2 用于封装以字符为导向的 InputStream1) 没有与 DataInputStream 对应的类。除非在要使用readLine()时改用 BufferedReader,否则使用 DataInputStream2) BufferedReader:与 BufferedInputStream 对应3) LineNumberReader:与 LineNumberInputStream 对应4) PushBackReader:与 PushbackInputStream 对应2.3 FilterOutStream 的各种类型2.2.3 用于封装以字节为导向的 OutputStream1) D

9、ataIOutStream:往 stream 中输出基本类型(int、char 等)数据。2) BufferedOutStream:使用缓冲区3) PrintStream:产生格式化输出2.2.4 用于封装以字符为导向的 OutputStream1) BufferedWrite:与对应2) PrintWrite:与对应3. RandomAccessFile1) 可通过 RandomAccessFile 对象完成对文件的读写操作2) 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw 可读写3) 可以直接跳到文件中指定的位置4. I/O 应用的一个例子import java.i

10、o.*;public class TestIOpublic static void main(String args)throws IOException/1.以行为单位从一个文件读取数据BufferedReader in = new BufferedReader(new FileReader(“F:nepalonTestIO.java“);String s, s2 = new String();while(s = in.readLine() != null)s2 += s + “n“;in.close();/1b. 接收键盘的输入BufferedReader stdin = new Buff

11、eredReader(new InputStreamReader(System.in);System.out.println(“Enter a line:“);System.out.println(stdin.readLine();/2. 从一个 String 对象中读取数据StringReader in2 = new StringReader(s2);int c;while(c = in2.read() != -1)System.out.println(char)c);in2.close();/3. 从内存取出格式化输入tryDataInputStream in3 = new DataInp

12、utStream(new ByteArrayInputStream(s2.getBytes();while(true)System.out.println(char)in3.readByte(); catch(EOFException e)System.out.println(“End of stream“);/4. 输出到文件tryBufferedReader in4 =new BufferedReader(new StringReader(s2);PrintWriter out1 =new PrintWriter(new BufferedWriter(new FileWriter(“F:n

13、epalon TestIO.out“);int lineCount = 1;while(s = in4.readLine() != null)out1.println(lineCount+ + “:“ + s);out1.close();in4.close();catch(EOFException ex)System.out.println(“End of stream“);/5. 数据的存储和恢复tryDataOutputStream out2 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(“F:ne

14、palon Data.txt“);out2.writeDouble(3.1415926);out2.writeChars(“nThas was pi:writeCharsn“);out2.writeBytes(“Thas was pi:writeByten“);out2.close();DataInputStream in5 =new DataInputStream(new BufferedInputStream(new FileInputStream(“F:nepalon Data.txt“);BufferedReader in5br =new BufferedReader(new Inpu

15、tStreamReader(in5);System.out.println(in5.readDouble();System.out.println(in5br.readLine();System.out.println(in5br.readLine();catch(EOFException e)System.out.println(“End of stream“);/6. 通过 RandomAccessFile 操作文件RandomAccessFile rf =new RandomAccessFile(“F:nepalon rtest.dat“, “rw“);for(int i=0; i10; i+)rf.writeDouble(i*1.414);rf.close();rf = new RandomAccessFile(“F:nepalon rtest.dat“, “r“);for(int i=0; i10; i+)System.out.println(“Value “ + i + “:“ + rf.readDouble();rf.close();rf = new RandomAccessFile(“F:nepalon rtest.dat“, “rw“);rf.seek(5*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号