Rumah >Java >javaTutorial >Bagaimana untuk Mengendalikan Aliran Input/Output dengan Amanah dalam Proses Java?

Bagaimana untuk Mengendalikan Aliran Input/Output dengan Amanah dalam Proses Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-17 21:16:11786semak imbas

How to Reliably Handle Input/Output Streams in Java Processes?

Proses Java dengan Strim Input/Output

Artikel ini meneroka selok-belok menggunakan aliran input dan output apabila bekerja dengan proses Java. Kami akan memberi tumpuan terutamanya pada menyelesaikan cabaran yang dihadapi dalam mengekalkan kefungsian strim ini.

Latar Belakang

Contoh kod yang disediakan menunjukkan senario di mana perintah boleh dimasukkan ke dalam bash shell dan output yang berbangkit ialah bergema. Walau bagaimanapun, isu timbul selepas bacaan awal, mengakibatkan ketidakbolehoperasian aliran keluaran berikutnya. Artikel ini bertujuan untuk menjelaskan isu ini dan mencadangkan penyelesaian.

Menyelesaikan Masalah

Langkah pertama melibatkan pengubahsuaian coretan kod untuk memanfaatkan kelas ProcessBuilder, yang memudahkan pelaksanaan proses luaran. Kelebihan utamanya ialah keupayaan untuk mengubah hala aliran ralat standard proses kanak-kanak ke dalam output standardnya.

ProcessBuilder builder = new ProcessBuilder("/bin/bash");
builder.redirectErrorStream(true);
Process process = builder.start();

Selain itu, gelung yang bertanggungjawab untuk membaca output standard proses terdedah kepada penggantungan, kerana ia tamat sepenuhnya apabila tamat -of-fail daripada pembaca. Untuk menyelesaikan masalah ini, teknik yang melibatkan garisan "ajaib" digunakan untuk menyempadani kesimpulan keluaran perintah shell.

while (scan.hasNext()) {
    String input = scan.nextLine();
    writer.write("((" + input + ") && echo --EOF--) || echo --EOF--\n");
    writer.flush();

    line = reader.readLine();
    while (line != null && ! line.trim().equals("--EOF--")) {
        System.out.println ("Stdout: " + line);
        line = reader.readLine();
    }
    if (line == null) {
        break;
    }
}

Keterbatasan

Adalah penting untuk mengakui batasan pendekatan ini :

  • Arahan yang menggesa untuk input pengguna boleh menyebabkan program muncul tidak bertindak balas.
  • Andaian bahawa setiap output proses ditamatkan oleh baris baharu mungkin tidak berlaku dalam semua kes.
  • Kejadian yang jarang berlaku apabila perintah yang dilaksanakan mengeluarkan "--EOF--" mungkin membawa kepada tingkah laku yang salah.
  • Kurungan yang tidak dapat dipadankan dalam arahan bash boleh mengakibatkan ralat dan proses sintaks penamatan.

Kesimpulan

Pindaan yang digariskan dalam artikel ini memberikan penyelesaian menyeluruh kepada cabaran yang dihadapi dalam mengekalkan kefungsian aliran input/output apabila bekerja dengan proses Java. Walaupun teknik ini mungkin mempunyai had tertentu, ia menawarkan cara yang boleh dipercayai untuk melaksanakan perintah shell dan mendapatkan semula outputnya secara berkala melalui tugas yang dijadualkan.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Aliran Input/Output dengan Amanah dalam Proses Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn