前言:
作为Java开发者,了解和熟练掌握Java IO流是必不可少的。在Java IO流的世界中,不仅有基本的字节流,还有一系列强大且方便的操作流类,如字符流、缓冲流、转换流、打印流、数据流和序列化流。本篇博客将带你深入了解这些IO流的特性和用法,助你写出更加高效和灵活的Java程序。
一、字符流:轻松处理文本数据
字符流在处理文本数据时比字节流更加方便。通过使用字符流类Reader和Writer可以直接读取和写入字符数据,而无需进行字节到字符的转换。
实例代码1: 使用字符流读写文本文件
import java.io.*;
public class CharacterStreamExample {
public static void main(String[] args) {
try {
FileReader reader = new FileReader("data.txt");
FileWriter writer = new FileWriter("output.txt");
int data;
while ((data = reader.read()) != -1) {
writer.write(data);
}
reader.close();
writer.close();
System.out.println("字符流读写文本文件完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
二、缓冲流:提升IO性能
缓冲流通过减少与磁盘的直接交互次数,提高了IO性能。BufferedReader和BufferedWriter是常用的缓冲字符流,它们在读写大量数据时能够显著减少IO操作。
实例代码2: 使用缓冲流读写大文本文件
import java.io.*;
public class BufferedStreamExample {
public static void main(String[] args) {
try {
FileReader reader = new FileReader("data.txt");
BufferedReader bufferedReader = new BufferedReader(reader);
FileWriter writer = new FileWriter("output.txt");
BufferedWriter bufferedWriter = new BufferedWriter(writer);
String line;
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
bufferedWriter.newLine();
}
bufferedReader.close();
bufferedWriter.close();
System.out.println("缓冲流读写大文本文件完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、转换流:处理不同编码的数据
当需要在字节流和字符流之间进行转换时,转换流起到了关键作用。InputStreamReader和OutputStreamWriter能够通过指定不同的字符集进行数据的编码和解码操作。
实例代码3: 使用转换流处理不同编码的数据
import java.io.*;
public class TransStreamExample {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("data.txt");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
FileOutputStream fos = new FileOutputStream("output.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
int data;
while ((data = isr.read()) != -1) {
osw.write(data);
}
isr.close();
osw.close();
System.out.println("转换流完成数据编码和解码!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、打印流:简化文本输出
打印流提供了方便的方法来输出文本数据。PrintStream和PrintWriter是常用的打印输出流,它们封装了输出流,并提供了各种重载的println、printf等方法。
实例代码4: 使用打印流输出文本数据
import java.io.*;
public class PrintStreamExample {
public static void main(String[] args) {
try {
PrintStream ps = new PrintStream("output.txt");
ps.println("Hello, Java IO!");
ps.printf("PI: %.2f", Math.PI);
ps.close();
System.out.println("打印流输出文本数据完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
五、数据流与序列化流:处理复杂数据
数据流和序列化流提供了方便的方式来处理基本数据类型和对象。DataInputStream和DataOutputStream用于读写基本类型数据,而ObjectInputStream和ObjectOutputStream则用于对象的序列化和反序列化。
实例代码5: 使用数据流和序列化流处理复杂数据
import java.io.*;
public class DataObjectExample {
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("data.dat");
DataOutputStream dos = new DataOutputStream(fos);
dos.writeInt(42);
dos.writeDouble(3.14);
dos.writeUTF("Java IO");
dos.close();
System.out.println("数据流写入数据完成!");
FileInputStream fis = new FileInputStream("data.dat");
DataInputStream dis = new DataInputStream(fis);
int intValue = dis.readInt();
double doubleValue = dis.readDouble();
String stringValue = dis.readUTF();
dis.close();
System.out.println("数据流读取数据完成!");
System.out.println("Int Value: " + intValue);
System.out.println("Double Value: " + doubleValue);
System.out.println("String Value: " + stringValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
结尾:
本篇博客介绍了Java IO流中的字符流、缓冲流、转换流、打印流、数据流和序列化流的使用方法,希望能帮助你更好地理解和应用这些强大的IO工具。通过掌握这些实用的流类,你可以编写更加高效、灵活和可靠的Java程序,处理各种复杂的数据操作。