问题描述
我想使用Java NIO在两个线程之间实现数据交换。 这是我的代码:
Test.java
import .
PackListener.java
public class Test {
final static int BUFSIZE = 40;
private static Handler handler = new Handler();
public static void main(String[] args) throws Exception {
final Pipe pipe = Pipe.open();
new Thread(() -> {
ReadableByteChannel dst = pipe.source();
ByteBuffer buffer = ByteBuffer.allocate(BUFSIZE);
while (true) {
try {
while (dst.read(buffer) >= 0) {
buffer.flip();
String s = "";
while (buffer.remaining() > 0)
s = s + new String(new byte[]{buffer.get()});
buffer.clear();
System.out.println(s);
}
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
}
}).start();
PackListener pl = packet -> {
WritableByteChannel src = pipe.sink();
ByteBuffer buffer = ByteBuffer.allocate(BUFSIZE);
buffer.clear();
buffer.put(packet.getBytes());
buffer.flip();
while (src.write(buffer) > 0) ;
src.close();
};
for (int i = 0; i < 3; i++) {
handler.execInterface(pl);
}
}
}
Handler.java
public interface PackListener {
void doSmth(String packet);
}
我希望有3次:
public class Handler {
public void execInterface(PackListener pl) {
String packet = "Hello:" + LocalDateTime.now().toString();
pl.doSmth(packet);
}
}
但是我得到了
Hello:2020-08-21T23:42:53.056
Hello:2020-08-21T23:42:53.057
Hello:2020-08-21T23:42:53.058
我在新线程主体中尝试了“ while(true)”,但结果是相同的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)