JAVA 流

字节流(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 接口。
  • 63
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值