在 Java 编程中,IO 流是一个重要的概念。
它提供了一种方便的方式来读取和写入数据,无论是与文件、网络还是其他数据源进行交互。
第一部分:基础知识
1. 什么是 IO 流?
-
IO 流代表着输入(Input)和输出(Output)的数据流。它以字节或字符的形式传输数据。 -
输入流用于从数据源(如文件、网络等)读取数据。 -
输出流用于向目标(如文件、网络等)写入数据。
2. IO 流的分类
-
根据数据类型的不同,IO 流可以被分为字节流和字符流。 -
字节流用于处理二进制数据,如图像、音频等。 -
字符流用于处理文本数据,如文本文件的读写。
3. 常见的 IO 流类
-
FileInputStream/FileOutputStream:用于读写字节数据的文件流。 -
FileReader/FileWriter:用于读写字符数据的文件流。 -
BufferedInputStream/BufferedOutputStream:提供缓冲功能,提高读写性能。 -
BufferedReader/BufferedWriter:提供缓冲功能,方便按行读写文本数据。 -
ByteArrayInputStream/ByteArrayOutputStream:用于读写字节数组。 -
ObjectInputStream/ObjectOutputStream:用于对象的序列化和反序列化。 -
其他常见流类:PipedInputStream/PipedOutputStream、DataInputStream/DataOutputStream、RandomAccessFile等。
第二部分:基本读写操作
1. 使用 FileInputStream 和 FileOutputStream
-
创建 FileInputStream 实例,并使用 read() 方法读取字节数据。 -
创建 FileOutputStream 实例,并使用 write() 方法写入字节数据。
// 示例代码
try (FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt")) {
int data;
while ((data = fis.read()) != -1) {
fos.write(data);
}
} catch (IOException e) {
e.printStackTrace();
}
2. 使用 FileReader 和 FileWriter
-
创建 FileReader 实例,并使用 read() 方法读取字符数据。 -
创建 FileWriter 实例,并使用 write() 方法写入字符数据。
// 示例代码
try (FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt")) {
int data;
while ((data = fr.read()) != -1) {
fw.write(data);
}
} catch (IOException e) {
e.printStackTrace();
}
第三部分:高级读写操作
1. 使用 BufferedInputStream 和 BufferedOutputStream
-
创建 BufferedInputStream 实例,将其包装在 FileInputStream 上,提供缓冲功能。 -
创建 BufferedOutputStream 实例,将其包装在 FileOutputStream 上,提供缓冲功能。
// 示例代码
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();
}
2. 使用 BufferedReader 和 BufferedWriter
-
创建 BufferedReader 实例,将其包装在 FileReader 上,提供缓冲和按行读取的功能。 -
创建 BufferedWriter 实例,将其包装在 FileWriter 上,提供缓冲和按行写入的功能。
// 示例代码
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();
}
第四部分:其他常用操作
1. 对象的序列化和反序列化
-
使用 ObjectOutputStream 将对象序列化并写入文件。 -
使用 ObjectInputStream 从文件中读取对象并进行反序列化。
// 示例代码
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) {
MyClass obj = new MyClass();
oos.writeObject(obj); // 对象序列化
MyClass newObj = (MyClass) ois.readObject(); // 对象反序列化
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
2. 随机访问文件
-
使用 RandomAccessFile 可以在文件中任意位置读写数据。
// 示例代码
try (RandomAccessFile raf = new RandomAccessFile("data.txt", "rw")) {
// 读取数据
raf.seek(10); // 设置文件指针位置
byte[] buffer = new byte[1024];
int bytesRead = raf.read(buffer);
// 写入数据
raf.seek(20); // 设置文件指针位置
raf.write(buffer, 0, bytesRead);
} catch (IOException e) {
e.printStackTrace();
}
注:仅作者个人知识分享,如有错误可指正!
原文始发于微信公众号(Coder香):【每日一题】Java 基础篇 – IO流操作解析:你真的了解文件读写和数据传输吗?
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/217585.html