文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PipedReader与PipedWriter有哪些不同的地方

2023-05-31 14:24

关注

这篇文章将为大家详细讲解有关PipedReader与PipedWriter有哪些不同的地方,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

PipedWriter与PipedReader的区别

1. PipedWriter 源码

package java.io; public class PipedWriter extends Writer {   // 与PipedWriter通信的PipedReader对象   private PipedReader sink;   // PipedWriter的关闭标记   private boolean closed = false;   // 构造函数,指定配对的PipedReader   public PipedWriter(PipedReader snk) throws IOException {     connect(snk);   }   // 构造函数   public PipedWriter() {   }   // 将“PipedWriter” 和 “PipedReader”连接。   public synchronized void connect(PipedReader snk) throws IOException {     if (snk == null) {       throw new NullPointerException();     } else if (sink != null || snk.connected) {       throw new IOException("Already connected");     } else if (snk.closedByReader || closed) {       throw new IOException("Pipe closed");     }     sink = snk;     snk.in = -1;     snk.out = 0;     // 设置“PipedReader”和“PipedWriter”为已连接状态     // connected是PipedReader中定义的,用于表示“PipedReader和PipedWriter”是否已经连接     snk.connected = true;   }   // 将一个字符c写入“PipedWriter”中。   // 将c写入“PipedWriter”之后,它会将c传输给“PipedReader”   public void write(int c) throws IOException {     if (sink == null) {       throw new IOException("Pipe not connected");     }     sink.receive(c);   }   // 将字符数组b写入“PipedWriter”中。   // 将数组b写入“PipedWriter”之后,它会将其传输给“PipedReader”   public void write(char cbuf[], int off, int len) throws IOException {     if (sink == null) {       throw new IOException("Pipe not connected");     } else if ((off | len | (off + len) | (cbuf.length - (off + len))) < ) {       throw new IndexOutOfBoundsException();     }     sink.receive(cbuf, off, len);   }   // 清空“PipedWriter”。   // 这里会调用“PipedReader”的notifyAll();   // 目的是让“PipedReader”放弃对当前资源的占有,让其它的等待线程(等待读取PipedWriter的线程)读取“PipedWriter”的值。   public synchronized void flush() throws IOException {     if (sink != null) {       if (sink.closedByReader || closed) {         throw new IOException("Pipe closed");       }       synchronized (sink) {         sink.notifyAll();       }     }   }   // 关闭“PipedWriter”。   // 关闭之后,会调用receivedLast()通知“PipedReader”它已经关闭。   public void close() throws IOException {     closed = true;     if (sink != null) {       sink.receivedLast();     }   } }

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯