#java #nio
#java #nio
Вопрос:
Я хочу реализовать обмен данными между двумя потоками, используя Java NIO. Это мой код:
Test.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);
}
}
}
PackListener.java
public interface PackListener {
void doSmth(String packet);
}
Handler.java
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
но я получил:
Hello:2020-08-21T23:42:53.056
null
null
Я попробовал «while (true)» в теле нового потока, но результат тот же.
Комментарии:
1. Не делайте этого. Вы берете молоток, чтобы расколоть орех. Используйте очередь.