Java IO流详解:多种应用场景实例说明

Java IO流是处理数据输入和输出的核心机制,本文将通过多个例子详细说明Java中IO流的使用,涵盖文件读写、流转换、缓冲、对象序列化、网络通信、压缩和解压缩以及管道通信等常见的应用场景。

1. 文件读写

使用 FileInputStreamFileOutputStream 类可以进行文件的读写操作。例如,可以使用 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. 字节流和字符流的转换

使用 InputStreamReaderOutputStreamWriter 类可以将字节流转换为字符流。例如,可以使用 InputStreamReaderFileInputStream 读取的字节流转换为字符流,并使用 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. 缓冲流

使用 BufferedReaderBufferedWriter 类可以提高读写效率,因为它们可以一次读写多个字节或字符。例如,可以使用 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. 对象序列化

使用 ObjectInputStreamObjectOutputStream 类可以将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 类可以建立客户端和服务器之间的网络连接,并使用 InputStreamOutputStream 类进行数据的读写。例如,可以使用 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. 压缩和解压缩

使用 GZIPOutputStreamGZIPInputStream 类可以对数据进行压缩和解压缩。例如,可以使用 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. 管道通信

使用 PipedInputStreamPipedOutputStream 类可以在不同的线程之间进行管道通信。例如,可以使用 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流。

Java IO流详解:多种应用场景实例说明

原文地址: https://www.cveoy.top/t/topic/htAB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录