JavaAPI 之java.io

Java.io基本上包含三种类

1建立数据流的类(处理字节流,字符流)

2用于序列化的类和接口(字节流与字符流之间进行转换)

3 处理文件系统的类和接口(对文件进行操作)

InputStream/OutputStream是所有字节输入输出流的超类

以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息
Reader/Writer
是所有字符输入输出流的超类

Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream 中写入信息。

 

输入/输出流是按数据源而提供类的,如字节数组,String对象,文件,管道,序列,其他数据源等Java IO的一般使用原则:

 

一、按数据来源(去向)分类:
1
、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter
2
、是byte[]ByteArrayInputStream, ByteArrayOutputStream
3
、是Char[]: CharArrayReader, CharArrayWriter
4
、是String: StringBufferInputStream, StringReader, StringWriter
5
、网络数据流:InputStream, OutputStream, Reader, Writer

二、按是否格式化输出分:
1
、要格式化输出:PrintStream, PrintWriter

三、按是否要缓冲分:
1
、要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter

四、按数据格式分:
1
、二进制格式(只要不能确定是纯文本的): InputStream, OutputStream及其所有带Stream结束的子类
2
、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer的子类

五、按输入输出分:
1
、输入:Reader, InputStream类型的子类
2
、输出:Writer, OutputStream类型的子类

六、特殊需要:
1
、从StreamReader,Writer的转换类:InputStreamReader, OutputStreamWriter
2
、对象输入输出:ObjectInputStream, ObjectOutputStream
3
、进程间通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter
4
、合并输入:SequenceInputStream
5
、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader

决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):
首先,考虑最原始的数据格式是什么: 原则四
第二,是输入还是输出:原则五
第三,是否需要转换流:原则六第1
第四,数据来源(去向)是什么:原则一
第五,是否要缓冲:原则三 (特别注明:一定要注意的是readLine()是否有定义,有什么比read, write更特殊的输入或输出方法)
第六,是否要格式化输出:原则二

 

1.1 以字节为导向的stream
以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型:
1) InputStream

1) ByteArrayInputStream
:把内存中的一个缓冲区作为InputStream使用
2) StringBufferInputStream
:把一个String对象作为InputStream
3) FileInputStream
:把一个文件作为InputStream,实现对文件的读取操作
4) PipedInputStream
:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream
:把多个InputStream合并为一个InputStream
2) OutputStream
1) ByteArrayOutputStream
:把信息存入内存中的一个缓冲区中
2) FileOutputStream
:把信息存入文件中
3) PipedOutputStream
:实现了pipe的概念,主要在线程中使用
4) SequenceOutputStream
:把多个OutStream合并为一个OutStream
1.2
Unicode字符为导向的stream
Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型:
1) InputStream

1) CharArrayReader:与ByteArrayInputStream对应
2) StringReader
:与StringBufferInputStream对应
3) FileReader
:与FileInputStream对应
4) PipedReader
:与PipedInputStream对应
2) OutputStream
1) CharArrayWriter
:与ByteArrayOutputStream对应
2) StringWriter
:无与之对应的以字节为导向的stream
3) FileWriter
:与FileOutputStream对应
4) PipedWriter
:与PipedOutputStream对应
以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,字是在操作时的导向不同。如CharArrayReader:和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。
1.3
两种不现导向的stream之间的转换
InputStreamReader
OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream
2. stream
添加属性
2.1 "
stream添加属性"的作用
运用上面介绍的Java中操作IOAPI,我们就可完成我们想完成的任何操作了。但通过FilterInputStreamFilterOutStream的子类,我们可以为stream添加属性。
如果我们要往一个文件中写入数据,我们可以这样操作:
FileOutStream fs = new FileOutStream("test.txt");
然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是,如果我们想实现"先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中"的功能时,上面的API就没有一个能满足我们的需求了。但是通过FilterInputStreamFilterOutStream的子类,为FileOutStream添加我们所需要的功能。
2.2 FilterInputStream
的各种类型
2.2.1
用于封装以字节为导向的InputStream
1) DataInputStream
:从stream中读取基本类型(intchar等)数据。
2) BufferedInputStream
:使用缓冲区
3) LineNumberInputStream
:会记录input stream内的行数,然后可以调用getLineNumber()setLineNumber(int)
4) PushbackInputStream
:很少用到,一般用于编译器开发
2.2.2
用于封装以字符为导向的InputStream
1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream
2) BufferedReader
:与BufferedInputStream对应
3) LineNumberReader
:与LineNumberInputStream对应
4) PushBackReader
:与PushbackInputStream对应
2.3 FilterOutStream
的各种类型
2.2.3
用于封装以字节为导向的OutputStream
1) DataIOutStream
:往stream中输出基本类型(intchar等)数据。
2) BufferedOutStream
:使用缓冲区
3) PrintStream
:产生格式化输出
2.2.4
用于封装以字符为导向的OutputStream
1) BufferedWriter
:与对应
2) PrintWriter
:与对应
3. RandomAccessFile
1)
可通过RandomAccessFile对象完成对文件的读写操作
2)
在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写

------------------------------------------------------------------

本文部分内容转载

http://www.blogjava.net/jiujiubuzui/articles/136580.html

http://www.blogjava.net/spark/archive/2006/09/29/72733.html

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值