Java 中 IO 流

2023-12-15 16:13:03

目录

前言

1. 字节流(Byte Streams):

1.1 输入字节流:

1.2 输出字节流:

2. 字符流(Character Streams):

2.1 输入字符流:

2.2 输出字符流:

3. 转换流(转换流用于连接字节流和字符流):

4. 对象流:

我的其他博客


前言

在Java中,I/O(输入/输出)流是用于处理输入和输出操作的机制。Java的I/O流主要分为两大类:字节流(Byte Streams)和字符流(Character Streams)。每个类别又分为输入流和输出流。

1. 字节流(Byte Streams):

字节流以字节为单位进行读写操作,适用于处理二进制数据(如图像、音频等)。

1.1 输入字节流:
  • InputStream(输入流的抽象基类):
    • FileInputStream: 从文件读取字节。
      FileInputStream fis = new FileInputStream("example.txt");
      int data = fis.read();
      while (data != -1) {
          // 处理读取的字节数据
          System.out.print((char) data);
          data = fis.read();
      }
      fis.close();
      

    • ByteArrayInputStream: 从字节数组读取字节。
      byte[] byteArray = {65, 66, 67, 68, 69}; // ASCII values for A, B, C, D, E
      ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
      int data = bais.read();
      while (data != -1) {
          // 处理读取的字节数据
          System.out.print((char) data);
          data = bais.read();
      }
      bais.close();
      

    • BufferedInputStream: 提供缓冲功能,提高读取效率。
      FileInputStream fis = new FileInputStream("example.txt");
      BufferedInputStream bis = new BufferedInputStream(fis);
      int data = bis.read();
      while (data != -1) {
          // 处理读取的字节数据
          System.out.print((char) data);
          data = bis.read();
      }
      bis.close();
      

1.2 输出字节流:
  • OutputStream(输出流的抽象基类):
    • FileOutputStream: 向文件写入字节。
      FileOutputStream fos = new FileOutputStream("output.txt");
      fos.write("Hello, World!".getBytes());
      fos.close();
      

    • ByteArrayOutputStream: 将字节写入到字节数组。
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      baos.write("Hello, World!".getBytes());
      byte[] result = baos.toByteArray();
      baos.close();
      

    • BufferedOutputStream: 提供缓冲功能,提高写入效率。
      FileOutputStream fos = new FileOutputStream("output.txt");
      BufferedOutputStream bos = new BufferedOutputStream(fos);
      bos.write("Hello, World!".getBytes());
      bos.close();
      

2. 字符流(Character Streams):

字符流以字符为单位进行读写操作,适用于处理文本数据。

2.1 输入字符流:
  • Reader(输入流的抽象基类):
    • FileReader: 从文件读取字符。
      FileReader fr = new FileReader("example.txt");
      int data = fr.read();
      while (data != -1) {
          // 处理读取的字符数据
          System.out.print((char) data);
          data = fr.read();
      }
      fr.close();
      

    • CharArrayReader: 从字符数组读取字符。
      char[] charArray = {'A', 'B', 'C', 'D', 'E'};
      CharArrayReader car = new CharArrayReader(charArray);
      int data = car.read();
      while (data != -1) {
          // 处理读取的字符数据
          System.out.print((char) data);
          data = car.read();
      }
      car.close();
      

    • BufferedReader: 提供缓冲功能,提高读取效率。
      FileReader fr = new FileReader("example.txt");
      BufferedReader br = new BufferedReader(fr);
      String line = br.readLine();
      while (line != null) {
          // 处理读取的一行字符数据
          System.out.println(line);
          line = br.readLine();
      }
      br.close();
      

2.2 输出字符流:
  • Writer(输出流的抽象基类):
    • FileWriter: 向文件写入字符。
      FileWriter fw = new FileWriter("output.txt");
      fw.write("Hello, World!");
      fw.close();
      

    • CharArrayWriter: 将字符写入到字符数组。
      CharArrayWriter caw = new CharArrayWriter();
      caw.write("Hello, World!");
      char[] result = caw.toCharArray();
      caw.close();
      

    • BufferedWriter: 提供缓冲功能,提高写入效率。
      FileWriter fw = new FileWriter("output.txt");
      BufferedWriter bw = new BufferedWriter(fw);
      bw.write("Hello, World!");
      bw.close();
      

3. 转换流(转换流用于连接字节流和字符流):

  • InputStreamReader: 将字节输入流转换为字符输入流。
    FileInputStream fis = new FileInputStream("example.txt");
    InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
    BufferedReader br = new BufferedReader(isr);
    // 通过 BufferedReader 读取字符数据
    br.close();
    

  • OutputStreamWriter: 将字节输出流转换为字符输出流。
    FileOutputStream fos = new FileOutputStream("output.txt");
    OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
    BufferedWriter bw = new BufferedWriter(osw);
    // 通过 BufferedWriter 写入字符数据
    bw.close();
    

4. 对象流:

  • ObjectInputStream: 用于读取对象的输入流。
    FileOutputStream fos = new FileOutputStream("object.dat");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    
    MyClass obj = new MyClass(); // MyClass需要实现Serializable接口
    oos.writeObject(obj);
    
    oos.close();
    

  • ObjectOutputStream: 用于写入对象的输出流。
    FileInputStream fis = new FileInputStream("object.dat");
    ObjectInputStream ois = new ObjectInputStream(fis);
    
    MyClass obj = (MyClass) ois.readObject(); // 强制类型转换为实际的对象类型
    
    ois.close();
    

我的其他博客

Git命令大全:从基础到高级应用-CSDN博客

简单介绍一些其他的树-CSDN博客

什么是tomcat?tomcat是干什么用的?-CSDN博客

TCP/IP 四层体系结构-CSDN博客

Redis新数据类型-Bitmaps-CSDN博客

腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客Synchronized 优化-CSDN博客腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客

【计算机网络】URL概念及组成-CSDN博客

【计算机网络】TCP socket编程-CSDN博客

枚举类的final修饰-CSDN博客

什么是RabbitMQ-CSDN博客

文章来源:https://blog.csdn.net/AliceNo/article/details/135016738
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。