2010-11-20 2 views
1

UNIX 환경에서 System.in으로 전달되는 버퍼 된 데이터를 필요로하는 Java 프로그램이 있습니다.버퍼링 된 데이터를 차단하는 대신 파일에서 라인 버퍼 된 데이터를 프로그램으로 리디렉션하는 방법

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 

하지만이 운이 없었어요.

의견이나 제안이 있으십니까?

답변

0

대부분의 문제는 Java 프로그램에 있습니다. 왜 입력을 라인 버퍼링해야합니까? 그것은 한 번에 한 줄씩 읽도록 C의 fgets()의 아날로그를 사용하도록 설계되어야합니다. 그런 아날로그가 없다면 아마도 그 서비스를 제공하는 함수/클래스를 작성해야하고, 제공되는 유닛을 읽거나 라인 경계에서 분할하거나 연결할 수 있습니다.

파이프 파일 설명자에서 fstat() 시스템 호출을 사용하고 데이터가 없을 때만 파이프에 쓰기 (예 : st_size 멤버 참조)와 같이 이식 할 수없는 작업을해야 할 수도 있습니다. 그러나 그것이 작동 할 것이라는 보장은 없으며, 이식 불가능 함은 그렇지 않을 수도 있음을 의미합니다. 물론, 표준 I/O를 사용한다면 프로그램이 한 번에 한 줄 씩 작성하고 출력을 플러시하도록 할 수 있습니다.

+0

예, 분명히해야합니다. 자바 프로그램은 비 - 라인 버퍼 입력에 대해 실패하도록 설계되었으므로 "the_program"은 표준을 수용하는 모든 프로그램 일 수 있다고 가정해야합니다. 목표는 키보드를 통해 사용자 입력을 시뮬레이트하지만 텍스트 파일에서 미리 정의 된 테스트를 사용하는 것입니다 . – Milo

관련 문제