java io体系介绍

前言


       本文对java的io体系进行介绍。


1 总概


       IO,Input/Output,输入和输出。

       java的io处理分为两类,一类为字节流,一类为字符流。字节流处理的顶层接口为InputStream和OutputStream,字符流处理的顶层接口为Writer和Reader。


2 InputStream


       本节对InputStream及其体系进行介绍。

       InputStream体系关系如下图所示。

      


2.1 InputStream


       输入流的父类,提供read方法从stream中读取字节,有三种类型的read方法。

       read(),读取输入流的下一个字节,返回值为0到255,如果没有,则会返回-1。该方法一直block直到有数据可读。

       read(byte b[]),从输入流中读取一定数量的字节,字节存储在一个字节数组中。该方法一直block直到有数据可读。

            read(byte b[], int off, int len),从输入流中读取len长度的字节,字节存储到一个字节数组中,off为读取的第一个字节在字节数组中的位置。该方法一直block直到有数据可读。


2.2 ByteArrayInputStream            


       ByteArrayInputStream,内部包含一个buffer,buffer中存储字节,buffer由数组实现。其read方法是同步的,内部有一个pos,代表着下一个要读的字节在buffer中的位置。


2.3 FileInputStream


       FileInputStream,用于从File中读取字节,constructor可以是一个File对象,也可以是一个String,String表示的是File所在的路径。


2.4 PipedInputStream


       PipedInputStream,管道输入流。一个管道输入流应该连接到管道输出流,然后管道输入流可以读取到写入到管道输出流中的数据。通常,一个线程可以从管道输入流中读取数据,而这些数据由其他对应的线程向管道输出流中写入。当连接到管道的线程不再alive时,管道将broken。


2.5 ObjectInputStream


       ObjectInputStream,可以反序列化序列化到ObjectOutputStream中的obejct或者其他类型数据,提供readObejct方法,返回值为Obejct。

public static Object toObject(byte[] bytes) {  
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);  
        ObjectInputStream ois = null;  
        try {  
            ois = new ObjectInputStream(bais);  
            Object object = ois.readObject();  
            return object;  
        } catch(IOException ex) {  
            throw new RuntimeException(ex.getMessage(), ex);  
        } catch(ClassNotFoundException ex) {  
            throw new RuntimeException(ex.getMessage(), ex);  
        } finally {  
            try {  
                ois.close();  
            } catch (Exception e) {}  
        }  
 }

                      

2.6 FilterInputStream


       FilterInputStream,包含一些其他的输入流,其一些子类提供输入流处理的其他功能。其子类有BufferedInputStream,DataInputStream,PushbackInputStream,LineNumberInputStream。

       BufferedInputStream,缓冲输入支持和支持mark、reset操作,缓冲通过内部的一个byte数组实现。

       DataInputStream,支持应用程序从输入流中读取java的内部类型,例如int,char等。

       PushbackInputStream,拥有一个Pushback缓冲区,可以将字节推回而重新读取。

       LineNumberInputStream,已经Deprecated了。

            

2.7 其他


       StringBufferInputStream,已经Deprecated。

       SequenceInputStream,可以按顺序读取多个流。


3 OutputStream


       OutputStream,输出流,提供write方法写入字节到流中。本节对OutputStream及其体系进行介绍。

       OutputStream相关类如下图所示。

      


4 Writer

5 Reader

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值