输入输出流(二)
发布日期:2021-05-10 03:44:18 浏览次数:18 分类:精选文章

本文共 3246 字,大约阅读时间需要 10 分钟。

Java I/O流详解:从基础到实践

Java 的输入输出流是数据操作的基础,掌握它们是每个开发者不可或缺的技能。本文将从基础的字节流到高级的字符流,逐步探讨Java中的流操作。用户提供的代码和相关总结经过重组与优化,方便阅读和理解。


字符流

字符流(Character Stream)在Java中用于处理文本数据。它比字节流更适合处理特定的字符编码,特别是多语言环境下的文件读写。

字符输入流:FileReader

FileReader 是最基础的字符输入流,通常用于读取文本文件。

常用方法:
  • read():逐字符读取。
  • read(char[] c):一次性读取多个字符。
  • read(char[] c, int off, int len):读取指定长度的字符。
  • close():释放资源。
示例代码:
FileReader fr = new FileReader("a.txt");
StringBuffer sb = new StringBuffer();
while ((tmp = fr.read()) != -1) {
sb.append((char) tmp);
}
System.out.println(sb.toString());
全量读取:
FileReader fr = new FileReader("a.txt");
char[] c = new char[(int) (new File("a.txt").length())];
fr.read(c);
System.out.println(new String(c));
分块读取:
FileReader fr = new FileReader("a.txt");
char[] c = new char[5];
int tem;
while ((tem = fr.read(c)) != -1) {
System.out.print(new String(c, 0, tem));
}

字符输出流:FileWriter

FileWriter 用于写入文本文件,与FileReader互补。

常用方法:
  • write(String str):写入字符串。
  • write(String str, int off, int len):写入字符串的特定部分。
  • close():释放资源。
  • flush():立即写入磁盘。
示例代码:
FileWriter fw = new FileWriter("b.txt");
fw.write("Hello World");
fw.close();

缓冲流

缓冲流(Buffered IO)通过缓存数据在内存中,减少I/O操作次数,显著提高读写效率。

character stream improvements:

文件读取时,通常结合 BufferedReader 和 FileReader:

BufferedReader br = new BufferedReader(new FileReader("a.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}

文件写入时,结合 BufferedWriter 和 FileWriter:

BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
bw.write("数据");
bw.close();

转换流

转换流(Character Set)允许我们在读写时指定编码格式,解决不同系统间的编码差异。

读取文件:

FileInputStream fis = new FileInputStream("a.txt");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}

写入文件:

FileOutputStream fos = new FileOutputStream("b.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
bw.write("数据");
bw.close();

读写二进制文件

二进制流处理文件的原始内容,适用于图片、视频等二进制数据。

读取二进制文件:

FileInputStream fis = new FileInputStream("picture.jpg");
DataInputStream dis = new DataInputStream(fis);
byte[] data = new byte[dis.available()];
dis.read(data);
System.out.println(new String(data));

写入二进制文件:

FileOutputStream fos = new FileOutputStream("picture.jpg");
DataOutputStream dos = new DataOutputStream(fos);
byte[] data = ...;
dos.write(data);
dos.close();

Java序列化和反序列化

序列化是将对象状态转换为二进制数据,反序列化则重建对象。

示例对象:
public class Student implements Serializable {
private int id;
private String name;
private double score;
public Student(int id, String name, double score) {
this.id = id;
this.name = name;
this.score = score;
}
@Override
public String toString() {
return "Student{" + id + ", " + name + ", " + score + '}';
}
}
序列化写入:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));
oos.writeObject(new Student(1, "张三", 95));
oos.close();
反序列化读取:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));
Student student = ois.readObject();
System.out.println(student);
ois.close();

总结

Java 的输入输出流系统分为字节流和字符流等多种类型,适用于不同的应用场景。无论是简单的文件读写,还是复杂的二进制或序列化操作,都能通过合理选择流类型和配置来实现。掌握这些基础知识是Java编程的必备技能。

上一篇:多线程
下一篇:输入输出流(一)

发表评论

最新留言

不错!
[***.144.177.141]2025年05月02日 18时09分08秒