Java: InputStream.read не ждет ввода? - PullRequest
0 голосов
/ 11 октября 2011

G'day, я работаю над прокси, но один из входных потоков сокета странный:

while(true) {
        try {
            while ((BytesRead = inputstream.read(Line)) != -1) {
                OtherSocket.Write(Line, BytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

У меня есть почти то же самое для OtherSocket, но на этомон продолжает повторяться, как будто сервер продолжает отправлять данные, я предполагаю, что inputtream.read (Line) не ждет ввода, а возвращает -1.Есть ли какая-либо причина, по которой inputtream.read (Line) не будет ждать ввода, как это должно быть?

1 Ответ

2 голосов
/ 11 октября 2011

Я полагаю, InputStream.read продолжит возвращать -1 после закрытия сокета другим концом .

Почему вы хотите продолжать пытаться читать из потока, который уже вернул -1 из read? Это, кажется, ошибка для меня. Если вы хотите сохранить цикл while(true), вы должны поместить оператор break; после внутреннего цикла while, чтобы, если вам только что удалось нормально добраться до конца потока без проблем, Вы можете просто выйти из внешнего цикла.

Я сильно подозреваю, что попытка чтения из потока после того, как он уже потерпел неудачу, кстати, тоже плохая идея.

(Я бы также предложил, чтобы вы начали следовать более обычным именам Java - очень странно видеть имена переменных PascalCase. Также странно видеть метод с именем Write - это определенно не то, java.io.OutputStream ...)

...