Java IO 教程

Java IO:PipedWriter 类

PipedWriter 类(java.io.PipedWriter)可将字符流写入 Java 管道。在这方面,PipedWriter 的工作原理与 PipedOutputStream 非常相似,只是 PipedOutputStream 基于字节,而 PipedWriter 基于字符。换句话说,PipedWriter 是用来写文本的。

通常,PipedWriter 连接到 PipedReader,PipedWriter 和 PipedReader 通常由不同的线程使用。

PipedWriter 示例

下面是一个简单的 PipedWriter 示例:

package com.hxstrive.java_io;

import java.io.PipedReader;
import java.io.PipedWriter;

public class PipedReaderExample {
    public static void main(String[] args) throws Exception {
        try(PipedWriter pipedWriter = new PipedWriter();
            PipedReader pipedReader = new PipedReader(pipedWriter) ) {
            // 写入数据
            new Thread(() -> {
                try {
                    // 向管道写入数据
                    pipedWriter.write("hello world");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }).start();

            // 接收数据
            new Thread(() -> {
                try {
                    char[] buffer = new char[20];
                    // 从管道读取数据, 返回读取的字符数
                    int length = pipedReader.read(buffer);
                    System.out.println("接收数据: " + String.valueOf(buffer, 0, length));

                    // 退出程序
                    System.exit(0);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }).start();

            // 阻塞主线程, 防止主线程退出
            Thread.sleep(Long.MAX_VALUE);
        }
    }
}

上述示例,创建了两个线程,一个线程向 PipedWriter 写入,另一个线程从 PipedReader 中读取数据,并且利用 Java7 新特性 try-with-resources 来自动释放资源。

注意:PipedWriter 必须始终连接到 PipedReader。这样连接后,它们就形成了一个 Java 管道。

write()

PipedWriter 的 write() 方法接收一个 int,其中包含要写入的字节的字节值。这里的 int 类型参数实际上代表的是一个字符的 Unicode 码点,范围是 0 到 65535。

还有一些版本的 write() 方法使用字符串、字符数组等。如下:

  • write(char[] cbuf, int off, int len)  将字符数组 cbuf 中从偏移量 off 开始的 len 个字符写入此管道输出流。

  • write(String str, int off, int len)  将字符串 str 中从偏移量 off 开始的 len 个字符写入此管道输出流。

关闭 PipedWriter

当你完成向 PipedWriter 写字符后,应记得关闭它。关闭 PipedWriter 仅需要调用它的 close() 方法。如下:

pipedWriter.close();

你还可以使用 Java7 中引入的 try-with-resources 结构,自动关闭资源,如下:

try(PipedWriter pipedWriter = new PipedWriter(){
    pipedWriter.write("data 1");
}

注意,上述示例中,没有手动调用 close() 方法,而是通过 try-with-resources 结构自动关闭资源。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号