2012-05-04 3 views
0

Oracle Java Tutorial에 주어진 예제에서 그들은 정수로 문자를 읽으려고합니다 ....문자 스트림이 int를 읽는 이유는 무엇입니까?

왜, 어떻게 작동합니까?

try { 
     inputStream = new FileReader("xanadu.txt"); 
     outputStream = new FileWriter("characteroutput.txt"); 

     int c; 
     while ((c = inputStream.read()) != -1) { 
      outputStream.write(c); 
     } 
+0

... 컴퓨터의 거의 모든 것이 숫자이며 여기에 나오는 숫자는 문자 서수와 일치하기 때문에? – KeithS

+0

와우, 모든 빠른 답변에 대해 감사드립니다. 그것은 나를 많이 도왔다! – kwoebber

답변

4

char를 읽으면 파일 끝에 사용할 수있는 가치가 없습니다.

더 큰 유형 int을 사용하면 가능한 모든 문자를 가질 수 있으며 파일 끝을 의미하는 다른 기호를 사용할 수 있습니다.

0

이것은 문자가 정수이기 때문입니다. 각 문자에는 유니 코드가 있습니다.

+0

나는 네가 틀렸다고 생각해. 문자 (Java)는 정수보다 짧습니다. 어쩌면 내가 틀 렸어. 내가 확인 할게요. – Aslan986

+1

@ Aslan986 chars는 16 비트이고 ints는 32입니다. –

0

기본적으로 charint입니다. 다음을 시도하십시오.

char c = 'c'; 
int i = c; 

이로 인해 컴파일 오류가 발생하지 않습니다.

0

Java의 장면 뒤에서 char은 부호없는 16 비트 값입니다. int은 부호없는 32 비트 값입니다.

chars은 값이 ASCII 테이블에서 의미를 갖는 ints의 부분 집합입니다.

이 관계 때문에 두 형식을 다른 형식으로 쉽게 변환 할 수 있도록 구문에 편리합니다. 당신은 다음과 같은 설명을 볼 수 있습니다 Reader/Writer에 대한 설명서를 읽으면

0

음 :

작가의 클래스 - 방법

는 단일 문자를 기입합니다. 기입 해지는 문자는 지정된 정수 값의 하위 16 비트에 에 포함됩니다. 16 상위 비트는 무시됩니다. Writer의 경우, 그래서

public void write(int c) throws IOException { 
    synchronized (lock) { 
     if (writeBuffer == null){ 
      writeBuffer = new char[writeBufferSize]; 
     } 
     writeBuffer[0] = (char) c; 
     write(writeBuffer, 0, 1); 
    } 
} 

, 그리고 지금까지 내가이 볼 수 같은 char 데이터 형식 함께 할 수 있었다 :

는 그리고 코드는 단순히 않습니다.

한편, Reader은 그 문자의메소드는 문자 또는 스트림 표시기의 끝을 반환 할 책임이 있습니다.

문서는 말한다 : 범위의 정수로 방법

문자 읽기, 읽기

리더 클래스 0-65535이 -1 스트림의 마지막에 이르렀을 경우 .

이와 같이, char보다 큰 데이터 유형이 필요하며이 경우 int가 사용됩니다. 다음과 같이

그리고 그것은 구현됩니다

public int read() throws IOException { 
    char cb[] = new char[1]; 
    if (read(cb, 0, 1) == -1) 
     return -1; 
    else 
     return cb[0]; 
} 

그래서이 두 번째 경우는 더 큰 데이터 형식의 사용을 정당화한다.

두 클래스에서 모두 int를 사용하는 이유는 일관성 문제 일 수 있습니다.

관련 문제