Java I/O流如何使用

发布时间:2022-08-05 09:56:53 作者:iii
来源:亿速云 阅读:192

Java I/O流如何使用

Java I/O流是Java编程中用于处理输入和输出的核心机制。通过I/O流,程序可以从外部源(如文件、网络连接、内存等)读取数据,或将数据写入外部目标。Java的I/O流分为字节流和字符流两大类,分别用于处理字节数据和字符数据。

1. 字节流

字节流主要用于处理二进制数据,如图片、音频、视频等。Java提供了InputStreamOutputStream两个抽象类来表示字节流。

1.1 InputStream

InputStream是所有字节输入流的基类。常用的子类有FileInputStreamByteArrayInputStream等。

import java.io.FileInputStream;
import java.io.IOException;

public class InputStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.txt")) {
            int data;
            while ((data = fis.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1.2 OutputStream

OutputStream是所有字节输出流的基类。常用的子类有FileOutputStreamByteArrayOutputStream等。

import java.io.FileOutputStream;
import java.io.IOException;

public class OutputStreamExample {
    public static void main(String[] args) {
        try (FileOutputStream fos = new FileOutputStream("output.txt")) {
            String text = "Hello, World!";
            fos.write(text.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 字符流

字符流主要用于处理文本数据。Java提供了ReaderWriter两个抽象类来表示字符流。

2.1 Reader

Reader是所有字符输入流的基类。常用的子类有FileReaderBufferedReader等。

import java.io.FileReader;
import java.io.IOException;

public class ReaderExample {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("input.txt")) {
            int data;
            while ((data = fr.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.2 Writer

Writer是所有字符输出流的基类。常用的子类有FileWriterBufferedWriter等。

import java.io.FileWriter;
import java.io.IOException;

public class WriterExample {
    public static void main(String[] args) {
        try (FileWriter fw = new FileWriter("output.txt")) {
            String text = "Hello, World!";
            fw.write(text);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 缓冲流

为了提高I/O操作的效率,Java提供了缓冲流。缓冲流通过在内存中缓存数据,减少了对底层I/O设备的直接访问次数。

3.1 BufferedInputStreamBufferedOutputStream

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedStreamExample {
    public static void main(String[] args) {
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt"));
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
            int data;
            while ((data = bis.read()) != -1) {
                bos.write(data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.2 BufferedReaderBufferedWriter

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedRWExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("input.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 对象流

对象流用于序列化和反序列化对象。Java提供了ObjectInputStreamObjectOutputStream两个类来处理对象流。

4.1 ObjectOutputStream

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectOutputStreamExample {
    public static void main(String[] args) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) {
            MyClass obj = new MyClass("John", 30);
            oos.writeObject(obj);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class MyClass implements java.io.Serializable {
    private String name;
    private int age;

    public MyClass(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "MyClass{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

4.2 ObjectInputStream

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class ObjectInputStreamExample {
    public static void main(String[] args) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) {
            MyClass obj = (MyClass) ois.readObject();
            System.out.println(obj);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

5. 总结

Java的I/O流提供了丰富的类和方法来处理各种类型的输入和输出操作。通过字节流和字符流,可以处理二进制数据和文本数据。缓冲流可以提高I/O操作的效率,而对象流则用于序列化和反序列化对象。掌握这些I/O流的使用方法,可以帮助开发者更高效地处理数据输入输出任务。

推荐阅读:
  1. Java缓冲区类型与原生数组哪个垃圾回收更快
  2. java中的装饰器模式基本概念及实现

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java i/o流

上一篇:python怎么解决轮转数组问题

下一篇:React怎么使用axios请求数据并把数据渲染到组件

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》