Rumah >Java >javaTutorial >JSch Command Hang-Up: Bagaimana Mengelakkan Kebuntuan Semasa Membaca Output Besar?
JSch Command Output Hang-up: A Case Study
Apabila melaksanakan arahan melalui JSch, anda mungkin menghadapi situasi di mana kod kelihatan digantung semasa cuba membaca daripada aliran input ChannelExec. Untuk menyelesaikan masalah ini, adalah penting untuk memastikan bacaan berterusan daripada output sambil memantau status arahan.
Pertimbangkan coretan kod berikut:
<code class="java">while ((numRead = reader.read(buf)) != -1) { // ... }</code>
Jika arahan menghasilkan sejumlah besar output, ia boleh mengisi penimbal keluaran, menyebabkan arahan terhenti sementara menunggu penimbal dimakan. Ini boleh membawa kepada senario kebuntuan.
Untuk menangani isu ini, anda harus membaca kedua-dua output standard dan ralat standard secara berterusan, memantau status arahan. Ini memastikan penimbal keluaran kekal kosong, membenarkan arahan selesai tanpa gangguan.
<code class="java">while (true) { // Read from standard output while (in.available() > 0) { // Replace reader with in and err for error handling // ... } // Read from standard error while (err.available() > 0) { // Replace reader with in and err for error handling // ... } if (channel.isClosed()) { // ... } try { Thread.sleep(1000); } catch (Exception ee) { } }</code>
Dengan membaca secara berterusan daripada aliran keluaran dan ralat serta menyemak status saluran secara berkala, anda boleh mengelakkan penutupan telefon dan memastikan perintah itu berjaya diselesaikan.
Atas ialah kandungan terperinci JSch Command Hang-Up: Bagaimana Mengelakkan Kebuntuan Semasa Membaca Output Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!