Java基础I/O流类型

Java把不同的数据源与程序间的数据传输都抽象为“流”,以实现相对统一而简单的输入/输出(I/O,Input/Output)操作方式。

I/O流的分类有多种方式:

  •     按照数据流动的方向,可以分为输入流(InputStream)和输出流(OutputStream)。  

         输入流只能从中读取数据,而不能向其写出数据;而输出流则只能向其写出数据,而不 能从中读取数据。这里是站在程序的角度来确定出入方向,即将数据从程序外部传

         送到程序中谓之“输入”数据。反之,为输出。

  • 根据数据流所关联的是数据源还是其他数据流,可以分为节点流(Node Stream)和处理流(Processing Stream)。

        节点流直接与数据源连接,处理流不直接连到数据源。

  • 按照传输数据的“颗粒大小”划分,可分为字符流(Character Stream)和字节流(Byte Stream)。

           凡是以InputStream和OutputStream结尾的类型均为字节流,凡是以Reader和Writer结尾的均为字符流

 

 基础I/O流类型

  • InputStream

       抽象类java.io.InputStream是所有字节输入流类型的父类,该类中定义了以字节为单位读取数据的基本方法,并在其子类进行了分化和实现。

InputStream类中定义的方法包括

Java代码   收藏代码
  1. <span style="font-size: small;">public abstract int read()  
  2. 从此输入流中读下一个字节。字节值被转换为0-255之间的一个(无符号)整数返回,到达流的结尾无字节可读时将返回-1。  
  3. public int read(byte[] b)  
  4. 从此输入流中读取一定数目的字节并存入缓冲数组b。实际读取的字节数被作为一个整数返回,到达流的结尾无字节时将返回-1。  
  5. public int read(byte[],int off, int len)  
  6. 从此输入流中读取最多len个字节的数据到一个字节数组。它将尽可能去读取len个字节的数据,但可能只读取到较少数目的字节,实际读取的字节数被作为一个整数返回,到达流的结尾无字节可读时将返回-1。  
  7. public void close()  
  8. 关闭此输入流并释放任何与这个流相关联的系统资源。  
  9. public int available()  
  10. 返回此后从此输入流中还可以无阻塞地读取(或跳过)的字节数。  
  11. public long skip(long n)  
  12. 跳过并丢弃输入流中的n个字节数据。  
  13. public boolean markSupported()  
  14. 测试此输入流是否支持mark()和reset()方法。InputStream类的markSupported方法返回false,在其子类中产生了分化。  
  15. public synchronized void mark(int readlimit)  
  16. 标记此输入流中的当前位置。随后调用reset()方法时,将把这个流重置于最后一次标记的位置,从而使随后的读取重读同样的字节。参数readlimit指明输入流在标记位置失效前允许读多少字节。  
  17. public synchronized void reset()  
  18. 将此输入流重置于上一次在这个输入流上调用mark()方法时的位置。</span>  
  •   OutputStream

      java.io.OutputStream与java.io.InputStream是对应,是所有字节输出流类型的抽象父类。 

Java代码   收藏代码
  1. public abstract write(int b)  
  2. 将b的二进制表示值低8位组成一个字节,写出到此输出流。  
  3. public void write(byte b[])  
  4. 将字节数组b中的全部b.length个字节一次写出到此输出流。  
  5. public void write(byte b[],int off,int len)  
  6. 将字节数组b中下表off开始的len个字节写入到此输出流。  
  7. public void close()  
  8. 关闭此输入流并释放任何与之相关联的系统资源。  
  9. public void flush()  
  10. 清空此输出流,即将任何被缓冲输出的字节立即发送到输出流中。  
  •  Reader

 抽象类java.io.Reader是所有字符输入流的父类,其中声明了用于读取字符流的有关方法。

Java代码   收藏代码
  1. Reader 类中定义的方法有:  
  2. public int read()  
  3. 从此输入流中读取一个字符,并转换为0-65535范围的整数返回,到达流的结尾时返回-1。  
  4. public int read(char cbuf[])  
  5. 将字符读入数组cbuf,并返回实际读取的字符数,到达流的结尾时返回-1。  
  6. public int read(char cbuf[],int off,int len)  
  7. 将字符读入数组cbuf中从off开始的空间,每次最多读len个字符,返回实际读取的字符数,到达流的结尾时返回-1。  
  8. public boolean ready()  
  9. 判断此流是否准备好,如是,则可以进行读操作。  
  10. 还有一些与InputStream类相似的。  
  11. public abstract void close();  
  12. public long skip(long n)  
  13. public boolean markSupported();  
 
  • Writer

       java.io.Writer与java.io.Reader类对应,是所有字符输出流类型的共同父类,也是一个抽象类,其中声明的方法如下:

Java代码   收藏代码
  1. Writer类中定义的主要方法有:    
  2. public void write(int c)    
  3. 截取参数c二进制形式的低16位组成一个字符,并将其写出到当前对象所关联的数据源中。    
  4. public void write(char cbuf[])    
  5. 将数组cbuf中的字符依次写出。    
  6. public void write(char cbuf,int off, int len)    
  7. 将数组cbuf中下标off开始的len个字符写出。    
  8. public void write(String str)    
  9. 将字符串str中的全部字符依次写出。    
  10. public void write(String str,int off,int len)    
  11. 将字符串str中下标off开始的len个字符写出。    
  12. public abstract void close()    
  13. 关闭此输出流并释放任何与之相联系的系统资源。    
  14. public abstract void flush()    
  15. 清空此输出流,即将任何被缓冲输出的字符立即发送到输出流中。    
  16. public void mark(int readAheadLimit)     
  17. public void reset()   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值