上一篇学习了javaIO里面的 PipedReader 和 PipedWriter,这里对两个类做一个小小的练习:实现一个即时消息发送和接收的聊天系统(这里只实现单向发送,双向同理,定义两个管道即可)。
上一篇关于两个类源码的学习记录:https://www.cnblogs.com/coding-one/p/11351166.html
1. 定义发送者类,PipedSender.java
package com.one.jdksrc.java.io; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.PipedWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; /** * @author haoya_Coding_one * @version 1.0 * @create 2019/7/23 17:59 * @description TODO */ public class PipedSender implements Runnable { private PipedWriter pipedWriter = new PipedWriter(); private String stdInput = ""; Scanner scanner = new Scanner(System.in); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public PipedSender(){ } @Override public void run() { while (!"exit".equalsIgnoreCase(stdInput)){ try { System.out.print(simpleDateFormat.format(new Date()) + " >>:"); stdInput = scanner.nextLine(); pipedWriter.write(stdInput); } catch (IOException e) { System.out.println("发送出错了!"); } } try { pipedWriter.close(); } catch (IOException e) { System.out.println("关闭流出错了!"); } } public PipedWriter getPipedWriter() { return pipedWriter; } public void setPipedWriter(PipedWriter pipedWriter) { this.pipedWriter = pipedWriter; } public void connect(PipedReceiver pipedReceiver){ try { pipedWriter.connect(pipedReceiver.getPipedReader()); } catch (IOException e) { e.printStackTrace(); } } }