实现开启一条线程向Pipe 管道里面写入数据,另一条线程读取Pipe管道里面的数据
package com.mock;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Pipe;
import java.time.LocalTime;
public class TestPipe {
@Test
public void test() throws Exception {
final Pipe pipe = Pipe.open();
//一条线程向管道写数据,另一条线程从管道中读取数据
new Thread(() -> write(pipe)).start();
new Thread(() -> read(pipe)).start();
Thread.sleep(6000);
}
//写数据到管道
public void write(Pipe pipe) {
try {
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
while (true) {
byteBuffer.put((LocalTime.now() + "你好世界").getBytes());
byteBuffer.flip();
pipe.sink().write(byteBuffer);
Thread.sleep(1000);
byteBuffer.clear();
}
} catch (Exception e) {
e.printStackTrace();
}
}
//从管道中读取数据
public void read(Pipe pipe) {
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
while (true) {
try {
int len = pipe.source().read(byteBuffer);
System.out.println(new String(byteBuffer.array(), 0, len));
byteBuffer.clear();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
来源:CSDN
作者:周莫客
链接:https://blog.csdn.net/MockZhou/article/details/103653996