¿Cómo se diseña un bucle de lectura y escritura que funciona en un solo zócalo (que admite operaciones paralelas de lectura y escritura)? ¿Tengo que usar múltiples hilos? ¿Mi solución (java) es buena? ¿Qué hay de ese comando de dormir? ¿Cómo se usa eso dentro de ese circuito?Práctica recomendada para leer/escribir en un socket de servidor Java
Estoy tratando de utilizar 2 Temas:
Leer
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();
}
}
Escribir
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();
}
}
Lee no puede entregar un resultado adecuado, ya que no hay -1 envió. ¿Cómo resuelvo este problema?
¿Es este bucle de suspensión/escritura una buena solución?
¿Es esto Java? Por favor marque el idioma –
esto es java, pero esto es más una cuestión de diseño y no se relaciona con ninguna característica java en sí – Schifty
Es cierto, pero hace que la pregunta sea más específica –