Java IO概述

参考:http://blog.youkuaiyun.com/ilibaba/article/details/3955799

 

Java流在处理上分为字符流和字节流。字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。

Java内用Unicode编码存储字符,字符流处理类负责将外部的其他编码的字符流和java内Unicode字符流之间的转换。而类InputStreamReader和OutputStreamWriter处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。

一、以字节为导向的stream - InputStream/OutputStream

InputStream和OutputStream是两个abstact类,对于字节为导向的stream都扩展这两个基类;

1. InputStream

FileInputStream:把一个文件作为InputStream,实现对文件的读取操作。

PipedInputStream:实现了pipe的概念,主要在线程中使用,管道输入流是指一个通讯管道的接收端。一个线程通过管道输出流发送数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用。

SequenceInputStream:把多个InputStream合并为一个InputStream。“序列输入流”类允许应用程序把几个输入流连续地合并起来,并且使它们像单个输入流一样出现。每个输入流依次被读取,直到到达该流的末尾。然后“序列输入流”类关闭这个流并自动地切换到下一个输入流。

StringBufferInputStream:把一个String对象作为InputStream。

注释:不推荐使用StringBufferInputStream方法。此类不能将字符正确的转换为字节。

同JDK1.1版中的类似,从一个串创建一个流的最佳方法是采用StringReader类。


2. OutputSteam

FileOutputStream:文件输出流是向File或FileDescriptor输出数据的一个输出流。

PipedOutputStream:管道输出流是指一个通讯管道的发送端。一个线程通过管道输出流发送数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

ByteArrayOutputStream:把信息存入内存中的一个缓冲区中。该类实现一个以字节数组形式写入数据的输出流。当数据写入缓冲区时,它自动扩大。用toByteArray()和toString()能检索数据。


二、以字符为导向的stream - Reader/Writer

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

Reader/Writer为abstact类

以Unicode字符为导向的stream包括下面几种类型:

1. Reader


CharArrayReader:与ByteArrayInputStream对应此类实现一个可用作字符输入流的字符缓冲区。

StringReader:与StringBufferInputStream对应其源为一个字符串的字符流。


2. Writer


三、JavaIO的一般使用原则

1. 按数据来源(去向)分类:

1) 是文件:FileInputStream,FileOutputStream,(字节流)FileReader,FileWriter(字符)

2) 是byte[]:ByteArrayInputStream,ByteArrayOutputStream(字节流)

3) 是Char[]:CharArrayReader,CharArrayWriter(字符流)

4) 是String:StringBufferInputStream,StringBufferOuputStream(字节流)StringReader,StringWriter(字符流)

5) 网络数据流:InputStream,OutputStream,(字节流)Reader,Writer(字符流)


2. 按是否格式化输出分:

1) 要格式化输出:PrintStream,PrintWriter


3. 按是否要缓冲分:

1) 要缓冲:BufferedInputStream,BufferedOutputStream,(字节流)BufferedReader,BufferedWriter(字符流)


4. 按数据格式分:

1) 二进制格式(只要不能确定是纯文本的):InputStream,OutputStream及其所有带Stream结束的子类

2) 纯文本格式(含纯英文与汉字或其他编码方式);Reader,Writer及其所有带Reader,Writer的子类


5. 按输入输出分:

1) 输入:Reader,InputStream类型的子类

2) 输出:Writer,OutputStream类型的子类


6. 特殊需要:

1) 从Stream到Reader,Writer的转换类:InputStreamReader,OutputStreamWriter

2) 对象输入输出:ObjectInputStream,ObjectOutputStream

3) 进程间通信:PipeInputStream,PipeOutputStream,PipeReader,PipeWriter

4) 合并输入:SequenceInputStream

5) 更特殊的需要:PushbackInputStream,PushbackReader,LineNumberInputStream,LineNumberReader


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值