Java IO流详解:多种应用场景实例说明
Java IO流详解:多种应用场景实例说明
Java IO流是处理数据输入和输出的核心机制,本文将通过多个例子详细说明Java中IO流的使用,涵盖文件读写、流转换、缓冲、对象序列化、网络通信、压缩和解压缩以及管道通信等常见的应用场景。
1. 文件读写
使用 FileInputStream 和 FileOutputStream 类可以进行文件的读写操作。例如,可以使用 FileInputStream 读取一个文本文件,并使用 FileOutputStream 将读取的内容写入另一个文件。
// 读取文件内容
FileInputStream fis = new FileInputStream("input.txt");
byte[] buffer = new byte[1024];
int bytesRead = fis.read(buffer);
// 写入文件
FileOutputStream fos = new FileOutputStream("output.txt");
fos.write(buffer, 0, bytesRead);
fis.close();
fos.close();
2. 字节流和字符流的转换
使用 InputStreamReader 和 OutputStreamWriter 类可以将字节流转换为字符流。例如,可以使用 InputStreamReader 将 FileInputStream 读取的字节流转换为字符流,并使用 OutputStreamWriter 将字符流写入 FileOutputStream。
// 字节流转换为字符流
InputStreamReader isr = new InputStreamReader(new FileInputStream("input.txt"), "UTF-8");
// 字符流写入文件
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("output.txt"), "UTF-8");
int ch;
while ((ch = isr.read()) != -1) {
osw.write(ch);
}
isr.close();
osw.close();
3. 缓冲流
使用 BufferedReader 和 BufferedWriter 类可以提高读写效率,因为它们可以一次读写多个字节或字符。例如,可以使用 BufferedReader 逐行读取一个文本文件,并使用 BufferedWriter 将读取的内容写入另一个文件。
// 逐行读取文件
BufferedReader br = new BufferedReader(new FileReader("input.txt"));
String line;
// 写入文件
BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"));
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
br.close();
bw.close();
4. 对象序列化
使用 ObjectInputStream 和 ObjectOutputStream 类可以将Java对象序列化为字节流或从字节流反序列化为Java对象。这对于在网络上传输对象或将对象存储到文件中非常有用。
// 序列化对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"));
oos.writeObject(new Person("张三", 20));
oos.close();
// 反序列化对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"));
Person person = (Person) ois.readObject();
ois.close();
5. 网络通信
使用 Socket 类可以建立客户端和服务器之间的网络连接,并使用 InputStream 和 OutputStream 类进行数据的读写。例如,可以使用 Socket 类在客户端和服务器之间传输文本或二进制数据。
// 服务器端
ServerSocket serverSocket = new ServerSocket(8080);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// 读取客户端数据
byte[] buffer = new byte[1024];
int bytesRead = is.read(buffer);
// 发送数据给客户端
os.write("Hello, Client!".getBytes());
is.close();
os.close();
socket.close();
serverSocket.close();
// 客户端
Socket socket = new Socket("localhost", 8080);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
// 发送数据给服务器
os.write("Hello, Server!".getBytes());
os.flush();
// 读取服务器数据
byte[] buffer = new byte[1024];
int bytesRead = is.read(buffer);
System.out.println(new String(buffer, 0, bytesRead));
is.close();
os.close();
socket.close();
6. 压缩和解压缩
使用 GZIPOutputStream 和 GZIPInputStream 类可以对数据进行压缩和解压缩。例如,可以使用 GZIPOutputStream 将数据压缩为gzip格式,并使用 GZIPInputStream 将gzip格式的数据解压缩。
// 压缩数据
GZIPOutputStream gos = new GZIPOutputStream(new FileOutputStream("compressed.gz"));
gos.write("Hello, World!".getBytes());
gos.close();
// 解压缩数据
GZIPInputStream gis = new GZIPInputStream(new FileInputStream("compressed.gz"));
byte[] buffer = new byte[1024];
int bytesRead = gis.read(buffer);
System.out.println(new String(buffer, 0, bytesRead));
gis.close();
7. 管道通信
使用 PipedInputStream 和 PipedOutputStream 类可以在不同的线程之间进行管道通信。例如,可以使用 PipedInputStream 读取从 PipedOutputStream 发送的数据。
// 发送线程
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream(pos);
new Thread(() -> {
try {
pos.write("Hello, World!".getBytes());
pos.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
// 接收线程
new Thread(() -> {
try {
byte[] buffer = new byte[1024];
int bytesRead = pis.read(buffer);
System.out.println(new String(buffer, 0, bytesRead));
pis.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
这些例子展示了Java中IO流的使用,涵盖了文件读写、流转换、缓冲、对象序列化、网络通信、压缩和解压缩以及管道通信等常见的应用场景。希望本文能够帮助您更好地理解和使用Java IO流。
原文地址: https://www.cveoy.top/t/topic/htAB 著作权归作者所有。请勿转载和采集!