java.io包学习1

系统 2332 0

转自: http://www.blogjava.net/cherishchen/archive/2007/07/10/129313.html

 

 

所有类的根接口:InputStream/OutputStream

一、底层的还是装饰的

1、底层的直接与文件系统或者硬件打交道的类(充当数据源的类):

包括InputStream和OutPutStream两大类,分别用于输入和输出,数据源可以是bytes array,String对象,file文件,stream序列等:

  • FileInputStream/FileOutputStream
  • ByteArrayInputStream/ByteArrayOutputStream
  • StringBufferInputStream/StringBufferOutputStream

等,具体参看下面的java io类图

2、充当装饰功能的io类,通过装饰底层的类来实现更高级的功能,继承自FilterOutputStream/FilterOutputStream,包括:

  • BufferedOutputStream/BufferedInputStream
  • Datainputstream/Dataoutputstream

等,具体参看下面的java io类图

使用FilterOutputStream/FilterOutputStream时,首先创建一个数据源IO,然后根据需要的功能创建装饰类io,其构造函数的参数为已创建的数据源io。

clip_image002

二、面向字符还是面向字节

同时,java的IO体系又可以分成:inputStream/outputStream和reader/writer两类:

(1) Reader/Writer是面向Unicode字符的(Characters)

(2) InputStream/OutputStream是直接面向字节的(bytes)。

Reader/Writer继承体系之所以存在,最重要的原因是为了国际化,旧式I/O stream 的继承体系仅仅支持8-bit byte stream,而且无法处理16-bit unicode 字符。由于unicode被用于字符国际化,所以加入Reader/Writer以便在所有的io动作上提供对unicode的支持。

几乎所有的java io stream classes都有相应的Reader和Writer来提供对unicode的支持,但是在某些场合,使用byte-oriented InputStream和OutPutStream才是正取的方法,最合理的方式是尽可能先尝试使用Read和Writer,其次才使用byte-oriented库。

三、从InputStream/OutPutStream到Reader/Writer的转换

InputStreamReader和OutputStreamWriter,可以把一个以字节为导向的stream转换成一个以字符为导向的stream。

Java 1.0 class(byte oriented)      Java 1.1 class(unicode character oriented)

装饰前的行为

InputStream                                                       Reader  转换器:InputStreamReader

OutputStreamReader                                          Writer  转换器: OutputStreamWriter

FileInputSream                                                   FileOutputStream

FileReader                                                          FileWriter

StringBufferInputStream                                    StringReader/ StringWriter                                    

ByteArrayInputStream                                         ByteArrayOutputStream                 

CharArrayReader                                                CharArrayWriter

装饰后的行为

BufferedInputStream                                          BufferedOutputStream

BufferedReader                                                   BufferedWriter

PrintStream                                                         PrintWriter

四、示例

DataInputStream 和DataOutputStream

Java 中除了二进制文件和使用文本文件外还有基于Data的数据操作,这里的Data指的是Java的基本数据类型和String。基本数据类型包括byte、int、char、long、float、double、boolean和short。

例子:

protected void connect (Socket socket)

throws IOException, SocketException

{

this.socket = socket;

applyTimeout();

serverIn = new DataInputStream (

new BufferedInputStream (socket.getInputStream ())

);

serverOut = new DataOutputStream(

new BufferedOutputStream(socket.getOutputStream(), 2048)

);

usable = true;

cnt[CONNECT]++;

setChanged();

notifyObservers();

}

在DataInputStream和DataOutputStream两个类中的方法都很简单,基本结构为readXXXX()和writeXXXX()其中XXXX代表基本数据类型或者String。

java.io包学习1


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论