JAVA 流

发布时间:2024年01月16日

字节流(Byte Streams)

  1. FileInputStream 和 FileOutputStream:

    • 好处: 直接操作字节,适用于处理二进制数据。适用于大型文件的读写。
    • 坏处: 不方便处理字符数据,需要手动转换。
      FileInputStream fis = new FileInputStream("input.txt");
      int data;
      while ((data = fis.read()) != -1) {
          // 处理字节数据
      }
      fis.close();
      
      FileOutputStream fos = new FileOutputStream("output.txt");
      fos.write(byteArray);
      fos.close();

  2. BufferedInputStream 和 BufferedOutputStream:

    • 好处: 提供缓冲功能,减少I/O次数,提高读写效率。适用于频繁读写小块数据的场景。
    • 坏处: 可能会导致一些数据在缓冲区中滞留,需要调用 flush() 方法来强制刷新。
      BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt"));
      int data;
      while ((data = bis.read()) != -1) {
          // 处理字节数据
      }
      bis.close();
      
      BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"));
      bos.write(byteArray);
      bos.close();

字符流(Character Streams)

  1. FileReader 和 FileWriter:

    • 好处: 方便处理字符数据,自动处理字符编码。适用于文本文件的读写。
    • 坏处: 不适用于处理二进制数据。
      FileReader reader = new FileReader("input.txt");
      int data;
      while ((data = reader.read()) != -1) {
          // 处理字符数据
      }
      reader.close();
      
      FileWriter writer = new FileWriter("output.txt");
      writer.write(charArray);
      writer.close();

  2. BufferedReader 和 BufferedWriter:

    • 好处: 提供缓冲功能,减少I/O次数,提高读写效率。适用于频繁读写小块数据的场景。自动处理换行符。
    • 坏处: 可能会导致一些数据在缓冲区中滞留,需要调用 flush() 方法来强制刷新。
      BufferedReader br = new BufferedReader(new FileReader("input.txt"));
      String line;
      while ((line = br.readLine()) != null) {
          // 处理一行字符数据
      }
      br.close();
      
      BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"));
      bw.write("Hello, World!");
      bw.close();

数据流(Data Streams)

  1. DataInputStream 和 DataOutputStream:
    • 好处: 专门用于读写基本数据类型,操作简便。
    • 坏处: 可读性较差,不适用于读写复杂数据结构。
      DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"));
      int intValue = dis.readInt();
      double doubleValue = dis.readDouble();
      dis.close();
      
      DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.dat"));
      dos.writeInt(42);
      dos.writeDouble(3.14);
      dos.close();

对象流(Object Streams)

  1. ObjectInputStream 和 ObjectOutputStream:
    • 好处: 可以直接读写Java对象,方便实现对象的序列化和反序列化。
    • 坏处: 对象必须实现 Serializable 接口。不适用于与其他非Java系统交互。
      DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"));
      int intValue = dis.readInt();
      double doubleValue = dis.readDouble();
      dis.close();
      
      DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.dat"));
      dos.writeInt(42);
      dos.writeDouble(3.14);
      dos.close();

总体比较:

  • 好处:

    • 字节流适用于处理任意二进制数据,字符流适用于处理文本数据。
    • 缓冲流提高了读写效率,减少了I/O次数。
    • 数据流专门用于读写基本数据类型。
    • 对象流方便地进行对象的序列化和反序列化。
  • 坏处:

    • 字节流处理字符数据不方便,需要手动转换。
    • 缓冲流可能导致数据在缓冲区中滞留。
    • 数据流对可读性要求高,不适用于复杂数据结构的读写。
    • 对象流对对象需要实现 Serializable 接口。
文章来源:https://blog.csdn.net/weixin_65127444/article/details/135561447
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。