最近在学socket的网络编程,但遇到了一点问题,就是每次循环从缓冲区读数据时,如果缓冲区没有数据,这时候read方***堵塞,此时也没有办法输入了。后来发现了主要有两种解决方法:
- 在消息开头标记消息长度
- 新启动一个线程进行读操作,阻塞就阻塞吧,反正读写没在一个线程(也算某种意义的读写分离)
这是最初会阻塞的代码 后来就用了读写分离,启动了新的线程来读
class read implements Runnable{
BufferedReader bufferedReader;
read(BufferedReader bufferedReader){
this.bufferedReader = bufferedReader;
}
@SneakyThrows
@Override
public void run() {
String info;
while((info = bufferedReader.readLine())!=null){
System.out.println(info);
}
}
}
就解决了堵塞