gpt4 book ai didi

java - BufferedReader.readLine() 方法阻塞替代方案

转载 作者:行者123 更新时间:2023-12-01 15:05:06 27 4
gpt4 key购买 nike

有什么办法可以让方法 readline() (来自 bufferedReader)阻塞,直到它实际上有东西要读吗?

我正在创建一个基于套接字的客户端/服务器应用程序,并且我有这个

服务器读取然后写入。 客户端写入然后读取..这是客户端/服务器之间的通信(基于套接字)

唯一的问题是,在服务器上我正在使用 bufferedReader.readLine() 进行读取,这不是阻塞方法。我已经尝试用 dataInputstream().read() 替换 bufferedReader.readLine() (处理所有字节内容并在收到 -1 时退出),但它也不起作用。

所有这一切的问题是服务器期望读取但不阻塞。只有当用户按下按钮时,客户端才会(通过套接字)写入服务器(因此服务器必须等待读取,但事实并非如此)

服务器端我有这个:

    BufferedReader READ = new BufferedReader(new InputStreamReader(skt.getInputStream()));
BufferedWriter WRITE = new BufferedWriter(new OutputStreamWriter(skt.getOutputStream()));
FileInputStream fstream = new FileInputStream(file);
DataInputStream in = new DataInputStream(fstream);

boolean FLAG = true;

String s = new String("#$");

while (FLAG) {


if (skt == null)
FLAG = false;

// READING FROM THE CLIENT
while (!READ.ready()){System.out.println("Blocking")};

while ((s = READ.readLine()) != null) {
System.out.println("RECEIVING: " + s);
System.out.println("$$$");
}

System.out.print("hi");
// READING FROM THE FILE AND SENDING TO THE CLIENT
//WRITTING TO THE CLIENT
while ((strLine = in.readLine()) != null) {
System.out.println("SENDING: " + strLine);
strLine += "\n";
WRITE.write(strLine);
WRITE.flush();
strLine = new String();
}
}

客户端端我有这个:

    //READING FROM THE FILE AND SENDING TO THE SERVER
while((strLine = in.readLine()) != null)
{

strLine += "\n";


soma+=strLine.length();
WRITE.write(strLine);
WRITE.flush();

TextArea1.append(strLine);
ProgressBar.setValue(soma);
ProgressBar.repaint();

};
in.close();


ProgressBar.setValue(0);
soma=0;

//READING FROM THE SERVER
while((strLine=READ.readLine()) != null)
{

strLine+="\n";
soma+=strLine.length();

TextArea2.append(strLine);
strLine = new String();
ProgressBar.setValue(soma);
ProgressBar.repaint();
}

in.close();
fstream.close();
WRITE.close();
READ.close();

Skt.close();

注意: Skt 是连接客户端到服务器的套接字。

这里的问题是。当客户端连接到服务器时,服务器期望在建立连接后立即从套接字读取..但是客户端上的代码(写入服务器)仅期望在用户按下按钮时运行..所以,服务器必须被阻塞,直到客户端实际上向套接字写入一些内容(服务器没有阻塞)。 :-/希望这次能更清楚地表达自己..抱歉

最佳答案

BufferedReader.readLine() 始终阻塞,直到找到 '\n'

如果您可以提供您发送的数据示例,我可能会为您提供进一步帮助。

关于java - BufferedReader.readLine() 方法阻塞替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13073205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com