我理解的java流基础篇(一)

在我的认识中,Java流就是用来读写文件的。说它是流不如说他是管来得更准确一点,是从源文件通向目标文件的一个管通道。微笑

一、从不同的角度区分流:

输入/输出

字节流

字符流

输入流

Inputstream

Reader

输出流

OutputStream

Writer

二、流之间的继承关系:

       字节流:

                                                          

                                                                             输入流    


                                                    

                                                                           输出流

       字符流:

                                            

                                                                            输入流 

                                           

                                                                            输出流

ps:若需记忆,按字节输入输出流,字符输入输出流的子类个数7567

三、就这几种流的用处,做一个简单的辨别:

Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义)

注:下表中带下划线的是抽象类,不能创建对象。粗体部分是节点流,其他就是常用的处理流。

流分类 使用分类 字节输入流 字节输出流 字符输入流 字符输出流
  抽象基类 InputStream

OutputStream

Reader Writer
节点流 访问文件 FileInputStream FileOutStream FileReader FileWriter
访问数值 ByteArrayInputStream ByteArrayOutStream CharArrayReader CharArrayWriter
访问管道 PipedInputStream PipedOutStream PipedReader PipedWriter
访问字符串     StringReader StringWriter
处理流 缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
转换流     InputStreamReader OutputStreamWriter
对象流 ObjectInputStream ObjectOutputStream    
抽象基类(过滤) FilterInputStream FilterOutputStream FilterReader FilterWriter
打印流   PrintStream   PrintWriter
推回输入流 PushbackInputStream   PushbackReader  
特殊流 DataInputStream DataOutputStream    

 

 

 

 

 

 

 

 

 

 




总结:

1.Java IO是采用的是装饰模式,即采用处理流来包装节点流的方式,来达到代码通用性。

2.处理流和节点流的区分方法,节点流在新建时需要一个数据源(文件、网络)作为参数,而处理流需要一个节点流作为参数,就是说节点流是操作文件的,处理流是操作节点流的。

3.处理流的作用就是提高代码通用性,编写代码的便捷性,提高性能。

4.节点流都是对应抽象基类的实现类,它们都实现了抽象基类的基础读写方法。

四、流常用的几种方法:

InputStream为字节输入流,本身是个抽象类,必须依靠其子类实现各种功能,数据单位位字节(8bit)。常用方法有:

        (1) public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。若返回值=-1说明没有读取到任何字节读取工作结束。
   (2) public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的 
   (3) public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。 
   (4) public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用, 
   (5) public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取 
   (6) public int close( ) :我们在使用完后,必须对我们打开的流进行关闭. 


         OutputStream为字节输出流,常用方法有:

    (1) public void write(byte b[ ]):将参数b中的字节写到输出流。 
  (2) public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。 
  (3) public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。 
  (4) public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。 
  (5) public void close( ) : 关闭输出流并释放与流相关的系统资源。


          Reader为字符输入流,常用方法有:

        (1)  public int read() throws IOException: 读取一个字符,返回值为读取的字符 

   (2)  public int read(char cbuf[]) throws IOException:读取一系列字符到数组cbuf[]中,返回值为实际读取的字符的数量
   (3)  public abstract int read(char cbuf[],int off,int len) throws IOException:读取len个字符,从数组cbuf[]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现。


          Writer为字符输出流,常用法有:

        (1) public void write(int c) throws IOException:将整型值c的低16位写入输出流 
   (2) public void write(char cbuf[]) throws IOException:将字符数组cbuf[]写入输出流 
   (3) public abstract void write(char cbuf[],int off,int len) throws IOException:将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流 
   (4) public void write(String str) throws IOException:将字符串str中的字符写入输出流 
   (5) public void write(String str,int off,int len) throws IOException:将字符串str 中从索引off开始处的len个字符写入输出流 
   (6) flush( ) :刷空输出流,并输出所有被缓存的字节。 
   (7) close()  :关闭流 


ps:几种流对应的方法大同小异,做对比加深记忆





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值