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 可读写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值