1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import java.io.IOException import java.io.PipedInputStream import java.io.PipedOutputStream fun main() { try { // Crear tubería de entrada y salida val pipeIn = PipedInputStream() val pipeOut = PipedOutputStream(pipeIn) // Crear un hilo para el proceso hijo val childThread = Thread { try { // Enviar un mensaje al padre val mensaje = "Hola, soy el hijo" pipeOut.write(mensaje.toByteArray()) pipeOut.close() } catch (e: IOException) { e.printStackTrace() } } // Iniciar el hilo del proceso hijo childThread.start() // Leer el mensaje enviado por el hijo en el proceso padre val buffer = ByteArray(100) val bytesRead = pipeIn.read(buffer) val mensajeRecibido = String(buffer, 0, bytesRead) println("El padre recibió el mensaje:") println(mensajeRecibido) // Cerrar la tubería de entrada pipeIn.close() } catch (e: IOException) { e.printStackTrace() } } |
Aquí está la explicación paso a paso:
- Importaciones:kotlinCopy code
import java.io.IOException import java.io.PipedInputStream import java.io.PipedOutputStream
Estas 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:pipeIn
que es una tubería de entrada ypipeOut
que 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 enpipeOut
se 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.