Как перенаправить линию буферизованных данных в программу из файла в отличие от блокировки буферизованных данных
-
26-09-2019 - |
Вопрос
У меня есть программа Java в среде Unix, которая требует переданных линейных данных, которые будут передаваться в System.in.
Прохождение в входе клавиатуры из терминала в порядке, однако, если я пытаюсь перенаправить вход из файла таким образом, как:
java the_program < input.txt
Программа не будет выполнена должным образом.
Каким образом я могу иметь буферизацию линии, в отличие от блокировки буферизованных данных передаваться в программу через stdin?
Я пытался:
stdbuf -oL cat input.txt | java the_program
и
stdbuf -i0 java the_program < input.txt
также как и
grep --line-buffered . input.txt | java the_program
Но не повезло.
Любые идеи или предложения?
Решение
Большая часть проблемы находится в программе Java - почему / Как вам нужен вход для буферизации линий? Это должно быть разработано для использования аналога C fgets()
Так что это просто читает строку за раз. Если такого аналога нет, то, возможно, вам нужно написать функцию / класс, который предоставляет этот сервис, принимая все возможное, в любых подразделениях предоставляются и разделите или объединяются на границах строк.
Не удалось, что вам, возможно, придется побаловать себя в неотложных операциях, таких как использование fstat()
Системный вызов на дескриптор файла трубы, пишу только в трубу, когда в нем нет данных (смотрит на st_size
член). Тем не менее, не гарантируется, что он будет работать - неотъемлемо означает, что он не может. Очевидно, вы бы гарантируете, что ваша программа записывает строку и размывает вывод при использовании стандартного ввода / вывода.