【java】IO流

x33g5p2x  于2021-03-13 发布在 Java  
字(2.1k)|赞(0)|评价(0)|浏览(416)

对于java的IO流的理解很长时间来都是很乱,包括学习其他的语言对这一块知识也都算是一个盲点.更多的时候一提到读取保存数据就是使用数据库。这一次学习了IO流,自己又解决了一个很大的盲点。

IO流为我们提供了这样一种方案,就是把我们的数据保存到文件中,或者从文件中读取我们的数据。IO流为我们提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地.源可以是文件、网络、压缩包或者其他数据源。

IO流分类

1.按流的方向分为输入流和输出流

2.按流的数据单位分为字节流和字符流

3.按功能分为字节流和处理流

节点流

节点流可以从一特定的数据源读写数据.

处理流

处理流是”连接”在已存在的流(节点流或处理流)之上.为对数据的处理提供更强大的读写功能.

关于节点就和处理流.就好比给了我们一桶水,我们需要一条水管将水引出来,这条水管就是节点流.但是流出来的水我们一看是不太干净,所以我们需要一个净化器,这个净化器就是处理流。

IO流的四大抽象类

InputStream:继承自InputStream的流都是用于向程序中输入数据。且数据的单位为字节(8bit)

outputSteam:与inputStream相似,用来输出数据。

Reader:继承自Reader的流都是用于向程序中输入数据,数据单位为字符(16 bit)

Write:与Reader相似,用于输出数据.

缓冲流

上面的输入输出流一次只能读取一个字节或者字符.如果我有1024个字节要读取,那么我要进行1024次操作。可以想象如果文件十分庞大这样的操作肯定会先很大的问题。基于这种问题,引出了缓冲流的概念。缓冲流就好比在水管后又加了一个水盆。

数据流

当我们需要读取java的一些基本类型的时候,如果使用inputStream和OutputStream会不断的进行转换。比如我们读取一个long类型的值(long类型占8个字节)时,读取很多次。此时数据流就为我们提供了这样一种操作。那就是直接读取这数值。

对象流

对象流就是把一个Object直接转换成字节流写到硬盘上或者网络上.这种操作叫做序列化.

几个小例子

1.第一个例子,演示了FileInputStream和FileOutStream的使用,该例子实现的是将a.txt中的文本复制一份到b.txt中去。

read()方法一次只能读取一个字节。使用当返回值为-1时表示已经读到了文本的末尾。

使用输入输出流要注意异常的处理。此处处理了两个异常

public static void main(String[] args) {
        int b=0;
        FileInputStream in=null;
        FileOutputStream out=null;
         try
         {
             in=new FileInputStream("G:/a.txt");
             out =new FileOutputStream("G:/b.txt");
             while((b=in.read())!=-1)
             {
                 out.write(b);
             }
             in.close();
             out.close();
         }
         catch(FileNotFoundException e2)
         {
             System.out.println("没有发现文件");
             System.exit(-1);
         }
          catch(IOException e1)
         {
             System.out.println("文件复制错误");
             System.exit(-1);
         }
         System.out.println("文件以复制");
    }

2.第二个例子展示了缓冲流的使用 使用缓冲流时readLine()方法一次可以读取一行数据.

此处有个强制类型转换.要注意,不然输出的会是ASCII码.

 public static void main(String[] args) {
       try
       {
           FileReader fis=new FileReader("G:/a.txt");
          BufferedReader bis=new BufferedReader(fis);
           int c=0;
           System.out.println(bis.readLine());//读取一行字符串
           for(int i=1;i<=3&&(c=bis.read())!=-1;i++)
           {
               System.out.print((char)c+"");//强制类型转换,不然输出的是ASCII码
           }
           System.out.println();
          bis.close();
       }
       catch(IOException e)
       {
           e.printStackTrace();
       }
    }

总结

IO流的带给了我另一种保存数据的方式,以前保存数据,就只会想到数据库.而现在我们又多了一种新的方式.对于IO流重要的是要理解字节流和处理流这两个概念.字节流负责把数据从数据源提取出来(或者将数据保存到文档中),而处理流是要对数据进行处理,其中有缓冲流,数据流和对象流,针对不同的使用环境我们要甄别使用,处理流可以重叠使用.然后理解了四个抽象类以及他们的方法.掌握了这些对于IO流的理解就算是基本入门了。

      

 

相关文章

微信公众号

最新文章

更多