zoukankan      html  css  js  c++  java
  • IO流总结

    IO流的作用:用于设备和设备之间的数据传输。

    IO流的概念:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。

    IO流的分类:

       按照操作数据的类型分为两种: 字节流和字符流。

       按照流的方向: 输入流和输出流。

       按流的功能不同分为:节点流和处理流。

    File类

           File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。

    1.字节流

       字节流 : 读取的是文件的二进制数据,不会对二进制做处理。
           字节流类以InputStream(字节输入流)和OutputStream(字节输出流)为顶层类。它们都是抽象类。
          FileInputStream: 是InputStream的子类。

          FileInputStream使用步骤:
        1.找到目标文件 
        2.建立通道
        3.[创建缓冲区]
        4.读取数据
        5.关闭资源

     1           //1.找目标文件
     2           File file = new File("文件路径");
     3           //2.建立通道
     4           FileInputStream fileInputStream = new FileInputStream(file);
     5           //3.创建一个缓冲区
     6           byte[] b = new byte[1024]; //理论上设置的缓冲区越大 读取的效率越高
     7           //4.读取数据
     8           int count = 0;
     9           while((count = fileInputStream.read(b))!=-1){
    10               //String里面做了解码功能
    11               System.out.println(new String(b,0,count));
    12           }
    13           //5.关闭资源
    14           fileInputStream.close();

        FileOutputStream: 是OutputStream的子类。 

      FileOutputStream使用步骤:
        1.找到目标文件 
        2.建立通道
        3.[创建缓冲区]
        4.写入数据
        5.关闭资源

         FileOutputStream使用的注意点:

        1.使用FileOutputStream写数据的时候,如果目标文件不存在,那么就会自己创建一个目标文件对象。

        2.使用FileOutputStream写数据的时候,如果目标文件存在,先将里面的数据清空,在写入数据。
        3.使用FileOutputStream写数据的时候,如果目标文件存在,想将数据在原有的基础上追加,这个时候就应该使用FileOutputStream(File file, boolean append) 构造方法, append如果为true表示可以追加数据,反之不信。
        4..使用FileOutputStream写数据的时候,用write(int a)方法写数据,虽然接收的是int ,但实际上只有一个字节的数据,操作的是低八位的二进制 ,其他的24位全部丢掉。

     1         //1.找目标文件
     2         File file = new File(文件路径);    
     3         //2.创建一个通道
     4         FileOutputStream outputStream = new FileOutputStream(file,true); 
     5         //3.创键一个字节数组
     6         String str = "hello word";
     7         //将字符串变为字节数组
     8         byte[] b = str.getBytes();
     9     
    10         //4.写入数据
    11         outputStream.write(b);    
    12         //5.关闭资源
    13         outputStream.close();        

    2.字符流 :

          字符流 :读的也是二进制文件,他会帮我们解码成我们看的懂的字符。

      字符流 = 字节流 + 解码。

          字符流分为:字符输入流和字符输出流。

          使用字符输出流时记得关闭资源或刷新数据,否则写入的数据不存在。

     1         //1.找目标文件
     2         File file = new File(文件路径);
     3         //2.建立通道
     4         FileWriter fileWriter = new FileWriter(file,true); //在文件后面继续追加数据
     5         //3.写入数据
     6         fileWriter.write("好好学习java");
     7         //刷新
     8         fileWriter.flush();
     9         //4.关闭数据
    10         //fileWriter.close();        

     字节流与字符流的区别:

       1.byte与char的区别,字节流使用的是 byte;

           2.字节流时采用二进制的编码直接传输,用字符流则牵涉到本地系统的编码问题;

           3.字节流按照8位传输,字符流按照16位传输,所以字符流可以读取中文。                       

     

    3.对象输入输出流 : ObjectInputStream、ObjectOutoutStream           

          使用注意点 :
               1.想要通过对象流读取或者写入对象到磁盘,需要使对象的所属类来实现Serializable接口 ,Serializable接口 没有方法只是作为哟个标记。
               2.当我改变类中的属性值,任然可以读取数据 ,需要设置serialVersionUID 为一个常量 :private static final long serialVersionUID = 1L;
               3.如果我不想将某个属性写入到磁盘 可以在用transient关键字来修饰。

  • 相关阅读:
    【Lintcode】112.Remove Duplicates from Sorted List
    【Lintcode】087.Remove Node in Binary Search Tree
    【Lintcode】011.Search Range in Binary Search Tree
    【Lintcode】095.Validate Binary Search Tree
    【Lintcode】069.Binary Tree Level Order Traversal
    【Lintcode】088.Lowest Common Ancestor
    【Lintcode】094.Binary Tree Maximum Path Sum
    【算法总结】二叉树
    库(静态库和动态库)
    从尾到头打印链表
  • 原文地址:https://www.cnblogs.com/chenrenshui/p/6164120.html
Copyright © 2011-2022 走看看