2014-09-18 2 views
0

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

Прошу прощения, что я новичок на этом сайте. Это все веб-сайт java? потому что это то, что я использую.

+0

Чтобы ответить на ваш второй вопрос, это далеко не все веб-сайты java. Но чтобы найти людей, которые знают что-то о java, просто пометьте ваше сообщение «java» и все, что применимо к вашему вопросу, и людям, которые знают java, будет легче найти его. –

ответ

0

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

0

Непонятно, что вы подразумеваете под «... поэтому я могу использовать его дважды».

Глубокая интерпретация заключается в том, что вы хотите сделать более одного вызова на объекте Scanner. Очевидно, что вам не нужно копировать Scanner, чтобы сделать это.

Следующая интерпретация заключается в том, что вы хотите использовать Scanner s, чтобы прочитать один и тот же токен потока дважды из того же входного потока. Это не сработает. Сканер предполагает, что он использует исключительно исходный поток ввода ... и он потребляет символов из потока. Поэтому, если у вас есть один входной поток с двумя сканерами, один из ваших сканеров получит некоторые из входных символов, а другой получит все остальное. (И, кроме того, какой сканер получает, какие символы не будут легко предсказуемы.)

Существует несколько способов обойти это. Например -

  • Если источник данных представляет собой файл (который открывает приложение), вы можете открыть его дважды и создать два независимых Scanner с для него.

  • Вы можете прочитать весь поток в памяти как String или StringBuffer или массив символов, а затем создать два входных потока для чтения буферизованных данных и inpdependent Scanner s для потоков.

  • Вы можете использовать «поток tee» (например: http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/input/TeeInputStream.html) или аналогично сохранять копию ввода в отдельный выходной поток, а затем передавать данные, записанные последним, в отдельный сканер.

Окончательная интерпретация заключается в том, что вы хотите, чтобы два сканера возвращали токены из одного потока. Если вы хотите это сделать, вам лучше использовать один сканер и передать его двум местам, которые в нем нуждаются. (Если вы попытаетесь использовать два сканера в одном и том же потоке ввода, вы можете столкнуться с проблемами, упомянутыми выше.)

Смежные вопросы