2013-02-06 2 views
6

최근 Java로 시작하여 큰 응용 프로그램의 Java 모듈을 이해하고자합니다. 할이 자바 코드를 무엇Java의 BufferedReader 및 InputStreamReader

String line = (new BufferedReader(new InputStreamReader(System.in))).readLine(); 

: 나는 자바 코드 줄을 가로 질러왔다. 이 C/C++에 상응하는 것이 있습니까?

+4

왜이 태그가 C++ 및 C입니까? –

+0

래퍼 및 래퍼.['InputStreamReader'] (http://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html) 및 ['BufferedReader'] (http://docs.oracle.com/)의 javadoc을 읽으십시오. .com/javase/7/docs/api/java/io/BufferedReader.html). –

+2

C++ 코드는 대략'std :: string line; std :: getline (std :: cin, line); ' – jrok

답변

9

System.in이 표준 입력입니다.

InputStreamReader을 사용하면 지정된 입력 (이 경우 표준 입력)에서 읽는 스트림을 연결할 수 있으므로 스트림이 생깁니다.

BufferedReader은 스트림 작업에 도움이되는 "추상화"입니다. 예를 들어, 전체 행을 얻으려면 '\ n'을 찾을 때까지 문자로 읽는 대신 readLine을 구현합니다. 이 처리 후에 String을 반환합니다.

그래서이 라인은 "표준 입력에서 라인을 읽고 변수에 line에 저장"을 의미합니다.

1

코드는 단순히 입력 스트림에서 한 행을 읽는 것입니다. 패턴 관점에서, 이것은 데코레이터입니다. BufferedReader를 사용하는 것은 IO 성능을 향상시키는 것을 목표로합니다.

+2

BufferedReader를 사용하는 것은 InputStreamReader에 존재하지 않는'readLine()'메소드를위한 것이다. – davmac

4

스니 j은 InputStreamReader에 연결된 BufferedReader를 사용하여 표준 입력 콘솔에서 aline을 읽고이를 String 행에 저장합니다. 문자, 배열, 행의 효율적인 읽기를 제공하기 위해 문자를 버퍼링 문자 입력 스트림에서

의 BufferedReader

읽기 텍스트. 버퍼 크기를 지정하거나 기본 크기를 사용할 수 있습니다. 기본값은 대부분의 경우 충분히 큽니다. 일반적으로 판독기로 이루어진 각 읽기 요청은 기본 문자 또는 바이트 스트림에 대한 해당 읽기 요청을 발생시킵니다. 따라서 FileReaders 및 InputStreamReader와 같이 read() 작업에 많은 비용이 소요될 수있는 Reader 주위에 BufferedReader를 래핑하는 것이 좋습니다.

의 BufferedReader 번호 작성한 Readline()

은 행의 텍스트를 읽어들입니다. 한 줄은 줄 바꿈 ('\ n'), 캐리지 리턴 ('\ r') 또는 캐리지 리턴 다음에 바로 줄 바꿈으로 끝나는 것으로 간주됩니다.

InputStreamReader하는 InputStreamReader는 바이트 스트림로부터 문자 스트림에 다리 바이트 데이터를 읽어 들여, 지정된 캐릭터 세트를 사용해 문자로 변환합니다. 사용하는 캐릭터 셋는 이름으로 지정하거나 명시 적으로 지정할 수도 있고 플랫폼의 기본 문자 세트를 사용할 수도 있습니다. InputStreamReader의 read() 메소드 중 하나를 호출 할 때마다 하나 이상의 바이트가 기본 바이트 입력 스트림에서 읽힐 수 있습니다. 바이트를 문자로 효율적으로 변환 할 수있게하려면 현재 읽기 작업을 충족시키는 데 필요한 것보다 많은 바이트가 기본 스트림에서 미리 읽을 수 있습니다.

시스템

시스템 클래스에는 유용한 클래스 필드 및 메서드가 포함되어 있습니다. 인스턴스화 할 수 없습니다.

System 클래스에서 제공하는 기능 중에는 표준 입력, 표준 출력 및 오류 출력 스트림이 있습니다. 외부에서 정의 된 "속성"에 대한 액세스. 파일과 라이브러리를 로딩하는 수단; 및 어레이의 일부분을 신속하게 복사하기위한 유틸리티 방법을 제공한다.

System.in

"표준"입력 스트림. 이 스트림은 이미 열려있어 입력 데이터를 제공 할 준비가되었습니다. 일반적으로이 스트림은 키보드 입력 또는 호스트 환경이나 사용자가 지정한 다른 입력 소스에 해당합니다.

7

> What does this java code do :

String linestring object

new BufferedReader().readLine()는 문자 입력 스트림에서 텍스트를 읽을 수있는 BufferedReader의 인스턴스가 당신입니다; readline()은 개행 문자까지 읽을 수 있도록 구현하는 메소드입니다.

new InputStreamReader()은 바이트 스트림의 표준과 BufferedReader이 원하는 문자 스트림 사이의 "브리지"인 InputStreamReader의 인스턴스를 제공합니다.)
그래서 난 당신이 대답을 원하는 가정합니다;

System.in

는 (바이트 스트림)


> Is there a C/C++ equivalent of this
음 ... C/C++ ...라는 어떤 언어도 없다 표준 입력 그들 각각을 위해.

char input[100]; 
... 
scanf("%99[^\n]", input); 

또는

fgets (input, 100 , stdin) 
: C에서

, 더 "문자열"은 문자 배열을 사용해야하지만,이 같은 뭔가 stdin에서 문자 배열에서 데이터를 읽을 수 없습니다 C++에서


, 당신은 사용하십시오 :

using namespace std; 

string line; 
getline(cin, line); 
1

InputStreamReader는 바이트 스트림에서 문자 스트림으로의 다리입니다. 바이트를 읽고 지정된 charset을 사용하여 문자를 디코딩합니다. 사용하는 캐릭터 셋는 이름으로 지정하거나 명시 적으로 지정할 수도 있고 플랫폼의 기본 문자 세트를 사용할 수도 있습니다.

InputStreamReader의 read() 메소드 중 하나를 호출 할 때마다 하나 이상의 바이트가 기본 바이트 입력 스트림에서 읽힐 수 있습니다. 바이트를 문자로 효율적으로 변환 할 수있게하려면 현재 읽기 작업을 충족시키는 데 필요한 것보다 많은 바이트가 기본 스트림에서 미리 읽을 수 있습니다.

효율성을 높이기 위해 BufferedReader 내에 InputStreamReader를 래핑하는 것을 고려합니다. 예 :

BufferedReader in = 새 BufferedReader (새 InputStreamReader (System.in));