Объединить несколько входных потоков

Мой вопрос может быть чем-то действительно базовым, но я не могу найти рабочее решение.

В моем коде у меня есть три новых InputStreams.

InputStream fstream = WasuTimeTool.class.getResourceAsStream("/resources/dbConParam.txt");
BufferedReader dbParamReader = new BufferedReader(new InputStreamReader(fstream));
String dbParamLine;

Просто как тот. Все одинаковы, кроме InputStreamString и переменных. Они построены так:

Stream One {

}

Stream Two {
    Stream Three {
    }
}

Когда я строил глобальные потоки, у меня возникали некоторые проблемы с использованием переменной и коллизиями из второго и третьего потоков. Существуют ли решения для получения одного единственного потока и создания новых экземпляров или они должны оставаться в виде трех разных потоков?

1 ответ

Решение
InputStream fstream = WasuTimeTool.class.getResourceAsStream("/resources/dbConParam.txt");
BufferedReader dbParamReader = new BufferedReader(new InputStreamReader(fstream));
String dbParamLine;

Больше похоже

Stream one{
   Stream two{
       Stream three{
       }
   }
}

Это правильно и хорошо.

Помните: закрытие BufferedReader (он же Stream one) закроет InputStreamReader и InputStream тоже!

Иногда Внутренние потоки имеют небольшой cache, Чтобы уважать это поведение, вы должны использовать поток с наиболее абстрактным уровнем, BufferedReader в твоем примере фара.

пример

Если у вас есть этот файл:

Hello
Friend

А ты читаешь Hello\nFri с использованием InputStreamтогда, если вы используете readLine от BufferedReader вы станете end, Это плохо, потому что это не вся строка, которую мы принимаем из метода readLine!

Решение

Вы должны сделать это:

BufferedReader dbParamReader = new BufferedReader(new InputStreamReader(WasuTimeTool.class.getResourceAsStream("/resources/dbConParam.txt")));
String dbParamLine;

Таким образом, никто не может быть привлечен к использованию InputStream непосредственно.

Другие вопросы по тегам