単一のソケット (並列読み取りおよび書き込み操作をサポートする) で動作する読み取りおよび書き込みループをどのように設計しますか? 複数のスレッドを使用する必要がありますか? 私の(Java)ソリューションは良いですか?そのスリープコマンドはどうですか?そのようなループ内でそれをどのように使用しますか?
私は2つのスレッドを使用しようとしています:
読んだ
public void run() {
InputStream clientInput;
ByteArrayOutputStream byteBuffer;
BufferedInputStream bufferedInputStream;
byte[] data;
String dataString;
int lastByte;
try {
clientInput = clientSocket.getInputStream();
byteBuffer = new ByteArrayOutputStream();
bufferedInputStream = new BufferedInputStream(clientInput);
while(isRunning) {
while ((lastByte = bufferedInputStream.read()) > 0) {
byteBuffer.write(lastByte);
}
data = byteBuffer.toByteArray();
dataString = new String(data);
byteBuffer.reset();
}
} catch (IOException e) {
e.printStackTrace();
}
}
書く
public void run() {
OutputStream clientOutput;
byte[] data;
String dataString;
try {
clientOutput = clientSocket.getOutputStream();
while(isOpen) {
if(!commandQueue.isEmpty()) {
dataString = commandQueue.poll();
data = dataString.getBytes();
clientOutput.write(data);
}
Thread.sleep(1000);
}
clientOutput.close();
}
catch (IOException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
-1 が送信されないため、読み取りは適切な結果を提供できません。この問題を解決するにはどうすればよいですか?
このスリープ/書き込みループは良い解決策ですか?