📄 demultiplexer.java
字号:
/* * Java Network Programming, Second Edition * Merlin Hughes, Michael Shoffner, Derek Hamner * Manning Publications Company; ISBN 188477749X * * http://nitric.com/jnp/ * * Copyright (c) 1997-1999 Merlin Hughes, Michael Shoffner, Derek Hamner; * all rights reserved; see license.txt for details. */import java.io.*;
import java.util.*;
public class Demultiplexer extends Thread {
static private int plexerNumber;
static private synchronized int nextPlexerNum () { return plexerNumber ++; }
protected MultiplexInputStream multiplexIn;
protected Hashtable targets;
public Demultiplexer (MessageInput messageIn) {
super ("Demultiplexer-" + nextPlexerNum ());
multiplexIn = new MultiplexInputStream (messageIn);
targets = new Hashtable ();
}
public void register (String label, MessageOutput messageOut) {
targets.put (label, messageOut);
}
public void deregister (String label) {
targets.remove (label);
}
protected boolean finished;
public void finish () {
finished = true;
interrupt ();
}
public void run () {
try {
while (!interrupted ()) {
multiplexIn.receive ();
String label = multiplexIn.getLabel ();
MessageOutput messageOut = (MessageOutput) targets.get (label);
if (messageOut != null) {
byte[] message = new byte[multiplexIn.available ()];
multiplexIn.readFully (message);
synchronized (messageOut) {
messageOut.write (message);
messageOut.send ();
}
}
}
} catch (IOException ex) {
if (!finished)
ex.printStackTrace ();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -