Comunicación mediante un hilo con tuberías en Kotlin
[crayon-6a61966b586b5618602380/]
Aquí está la explicación paso a paso:
- Importaciones:kotlinCopy code
import java.io.IOException import java.io.PipedInputStream import java.io.PipedOutputStreamEstas importaciones son necesarias para trabajar con las clases relacionadas con tuberías (pipes) y excepciones en Kotlin. - Función
main:kotlinCopy codefun main() {Aquí comienza la función principal del programa. Es el punto de entrada para la ejecución del programa Kotlin. - Creación de tuberías de entrada y salida:kotlinCopy code
val pipeIn = PipedInputStream() val pipeOut = PipedOutputStream(pipeIn)Se crean dos objetos:pipeInque es una tubería de entrada ypipeOutque es una tubería de salida. La tubería de salida se conecta a la tubería de entrada, de modo que lo que se escriba enpipeOutse pueda leer enpipeIn. - Creación de un hilo para el proceso hijo:kotlinCopy code
val childThread = Thread { // Código del proceso hijo aquí }Se crea un hilo (childThread) que ejecutará el código del proceso hijo. Este hilo es necesario porque el proceso hijo debe ejecutarse en paralelo al proceso padre. - Código del proceso hijo dentro del hilo:kotlinCopy code
try { val mensaje = "Hola, soy el hijo" pipeOut.write(mensaje.toByteArray()) pipeOut.close() } catch (e: IOException) { e.printStackTrace() }Dentro del hilo del proceso hijo, se escribe un mensaje en la tubería de salidapipeOut. Primero, se convierte el mensaje en un arreglo de bytes (mensaje.toByteArray()) y se escribe en la tubería. Luego, se cierra la tubería de salida para indicar que no se enviarán más datos. - Inicio del hilo del proceso hijo:kotlinCopy code
childThread.start()Se inicia el hilo del proceso hijo para que comience a ejecutar su código en paralelo al proceso padre. - Lectura del mensaje en el proceso padre:kotlinCopy code
val buffer = ByteArray(100) val bytesRead = pipeIn.read(buffer) val mensajeRecibido = String(buffer, 0, bytesRead)En el proceso padre, se crea un búfer (buffer) para almacenar los datos que se leerán de la tubería de entrada. Se utilizapipeIn.read(buffer)para leer los datos de la tubería de entrada en el búfer y se registra la cantidad de bytes leídos enbytesRead. Luego, se convierte el búfer en una cadena de texto (mensajeRecibido) para mostrarlo por pantalla. - Impresión del mensaje recibido en el proceso padre:kotlinCopy code
println("El padre recibió el mensaje:") println(mensajeRecibido) - Cierre de la tubería de entrada:kotlinCopy code
pipeIn.close()Finalmente, se cierra la tubería de entrada para liberar recursos.