java IO

  input  stream  Out  stream
DataInputStream  DataIOutStream
BufferedInputStream  BufferedOutStream
LineNumberInputStream  PrintStream
PushbackInputStream  
以字节为导
向的 stream
  
    
  ----------(无对应的)  
BufferedReader  BufferedWrite
LineNumberReader  PrintWrite
以Unicode字
符为导向的
stream
PushBackReader  
Table  3.0
3.1 以字节为导向的stream:
3.1.1  Input  Stream
1) DataInputStream:从stream中读取基本类型(int、char等)数据。
2) BufferedInputStream:使用缓冲区
3) LineNumberInputStream:会记录input stream内的行数,然后可以调用getLineNumber()和setLineNumber(int)
4) PushbackInputStream:很少用到,一般用于编译器开发
 
3.1.2 . Output  Stream
1) DataIOutStream:往stream中输出基本类型(int、char等)数据。
2) BufferedOutStream:使用缓冲区
3) PrintStream:产生格式化输出
 
3.2 以字符为导向的Stream
3.2.1  Input  Stream
1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用
DataInputStream
2) BufferedReader:与BufferedInputStream对应
3) LineNumberReader:与LineNumberInputStream对应
4) PushBackReader:与PushbackInputStream对应
 
3.2.2  Output    Stream
1) BufferedWrite:与对应
2) PrintWrite:与对应
3. 3 RandomAccessFile
1) 可通过RandomAccessFile对象完成对文件的读写操作
2) 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写
3) 可以直接跳到文件中指定的位置 Java I/O
输入/输出泛指对某个设备或环境进行数据的输入或输出。例如对硬盘进行输入/输出、对视频进行输入
/输出、对网络上主机进行输入/输出等,可以想象,因设备或环境的不同,会有各式各样的输入/输出问题
与解决方案。输入/输出问题在程序设计中实际上是一个很复杂的问题。
对于输入/输出问题,Java将之抽象化为流(Stream)对象来解决。对不同的输入/输出问题,会有相应
的流对象提供解决方案。本文章就是要学习Java中各式各样解决输入/输出问题的对象。
1、总体结构
首先,下图(table 1.0)从整体上对Java I/O进行了归纳:
 
Table   1.0
 
如果您对Decorator模式非常了解,就能轻易地看出Java的I/O类结构:根接口是 InputStream/OutputStream,
充当数据源的I/O类有FileInputStream/FileOutputStream, ByteArrayInputStream/ByteArrayOutputStream等,
充当装饰功能的IO类有 BufferedInputStream/BufferedOutputStream, DataInputStream/DataOutputStream等,
它们都是继承装饰接口 FilterInputStream/FilterOutputStream。使用I/O时,首先创建一个数据源I/O,然后根
据需要的功能创建装饰类I/O,  其构造函数的参数为已创建的数据源I/O。我们以创建一个具有缓冲的文件
输入流为例,假定需要从磁盘读取文件“C:/log.txt”:
// 创建一个FileInputStream:
FileInputStream fileInput = new FileInputStream("C://log.txt");  // 创建一个BufferedInputStream:
BufferedInputStream bufferedInput = new BufferedInputStream(fileInput); 
// 现在得到的bufferedInput即是具有缓冲的文件输入流  
或者进一步简写如下:
InputStream input = new BufferedInputStream(
new FileInputStream("C://log.txt"));      
// 现在得到的input即是具有缓冲的文件输入流
2、充当数据源的 I/O
  input  stream  Out  stream
ByteArrayInputStream  ByteArrayOutputStream
StringBufferInputStream  
FileInputStream  FileOutputStream
PipedInputStream  PipedOutputStream
以字节为导
向的 stream
SequenceInputStream  SequenceOutputStream
    
CharArrayReader  CharArrayWrite
StringReader  StringWrite
FileReader  FileWrite
以Unicode字
符为导向的
stream
PipedReader  PipedWrite
    
两种不现导
向的 stream
之间的转换
InputStreamReader  OutputStreamReader
    
Table  2.0
 
2.1 以字节为导向的stream:
以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream
包括下面几种类型:
2.1.1 . input  stream
1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
2) StringBufferInputStream:把一个String对象作为InputStream
3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作
4) PipedInputStream:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream:把多个InputStream合并为一个InputStream
 
2.1.2 . Output  stream
1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中
2) FileOutputStream:把信息存入文件中
3) PipedOutputStream:实现了pipe的概念,主要在线程中使用 4) SequenceOutputStream:把多个OutStream合并为一个OutStream
 
2.2  以Unicode字符为导向的stream:
以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。以
Unicode字符为导向的stream包括下面几种类型:
2.2.1. Input  Stream
1) CharArrayReader:与ByteArrayInputStream对应
2) StringReader:与StringBufferInputStream对应
3) FileReader:与FileInputStream对应
4) PipedReader:与PipedInputStream对应
 
2.2.2. Output  Stream
1) CharArrayWrite:与ByteArrayOutputStream对应
2) StringWrite:无与之对应的以字节为导向的stream
3) FileWrite:与FileOutputStream对应
4) PipedWrite:与PipedOutputStream对应
以  字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,字
是在操作时的导向不同。如 CharArrayReader:和ByteArrayInputStream的作用都是把内存中的一个缓冲区
作为InputStream使用,所不同的 是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个
字符。
 
2.3  两种不现导向的stream之间的转换
InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为
导向的stream。
 
2、充当数据源的 I/O
 
运用上面介绍的 Java 中操作 IO 的 API,我们就可完成我们想完成的任何操作了。但通过
FilterInputStream 和FilterOutStream的子类,我们可以为stream添加属性。下面以一个例子来说明这种功能
的作用。
    如果我们要往一个文件中写入数据,我们可以这样操作:
                        FileOutStream fs = new FileOutStream(“test.txt”);
    然后就可以通过产生的fs对象调用 write()函数来往test.txt 文件中写入数据了。但是,如果我们想实现
“先把要写入文件的数据先缓存到内存中, 再把缓存中的数据写入文件中”的功能时,上面的API就没有一
个能满足我们的需求了。但是通过FilterInputStream和 FilterOutStream的子类,为FileOutStream添加我们
所需要的功能。
 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值