Объединить несколько входных потоков
Мой вопрос может быть чем-то действительно базовым, но я не могу найти рабочее решение.
В моем коде у меня есть три новых 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
непосредственно.