Я новичок в Java, поэтому извиняюсь за то, что, вероятно, очень наивный вопрос. Я пишу приложение, которое будет общаться с несколькими другими процессами. Последний будет читать и писать с stdin и stdout. Я хотел бы перенаправить их ввод и вывод в файлы конкретных процессов и читать и писать оттуда.Блокировка ввода в Java
У меня, похоже, проблемы с читающей частью. В частности, если данные еще не появились во входном файле, то InputStream.read(), кажется, возвращает -1, а не ждет его. Я немного искал решение, и все, что я нашел, похоже, указывает на то, что проблема заключается в том, что преждевременное закрытие потока. Я не думаю, что я это делаю.
Вот некоторые фрагменты соответствующего кода:
class Player {
public Player(String Infile, String Outfile, int initBankRoll) {
File inFile;
File outFile;
try {
reader = new FileInputStream(Infile);
}
catch (IOException ioe) {
System.err.println("Could not open " + Infile);
}
...
}
public String readln() {
StringBuilder sb = new StringBuilder(80);
int i;
try {
while ((i = reader.read()) != '\n') {
sb.append(i);
}
} catch (IOException ioe) {
System.err.println("Could not read from file.");
}
return sb.toString();
}
Для чего это стоит, я предпочел бы иметь быстрое решение, чем элегантный один. Спасибо за любую помощь, которую любой может предоставить!
Ох - это может быть актуально. Я пытаюсь проверить отправку на входе, набрав кота -> TestFile на терминале ...
Передача данных через TCP может быть хорошим решением для communating между приложениями –
Спасибо за то, MJafar - Я думал об этом, и это может быть лучшим подходом. Я как бы собираюсь быстро и грязно на этом этапе :) – user3054726
Я изменил свой код на просто цикл, получая -1: while ((i = reader.read()) == -1); \t sb.append ((char) i); \t while ((i = reader.read())! = '\ N') { \t \t System.err.println ("Got:" + ((char) i)); \t \t sb.append ((char) i); \t} Это похоже на работу, но кажется ужасной тратой машинных циклов ... – user3054726