2012-03-17 3 views
0
는 java.io의 * 패키지의 InputStream 클래스에서

:는 바이트 정수에 저장되는 방법

INT의 읽기()는 바이트 스트림 클래스 아래로 IOException이

읽기() 바이트를 돌려줍니다 그러나 오류없이 정수로 저장됩니다.

왜 그렇게 되나요 ?? 그리고 어떻게 일어나고 있는지. 나에게 메모리 할당 설계를 도와도

+1

기술적으로 "바이트"는 서명되지 않은 반면 Java의 '바이트'는 서명됩니다. 따라서 8 비트에서와 같이 "바이트"이지만 Java 기본 유형에서와 같이 '바이트'가 아닙니다. –

답변

1

당신은 당신이 어떤 정보를 풀어 없기 때문에 (당신이 작은 일을 넣을 수 있습니다 ( 바이트를 사용 하나 적은 바이트를 사용하는 원시적에서) 자유롭게 업 캐스트 할 수 있습니다 대형 컨테이너).

당신이 작은 용기에 큰 일을 넣을 때 아래 캐스트 명시 적으로 캐스팅해야 (적은 바이트를 사용 하나 바이트를 사용하는 원시적에서) (, 당신은 위험을 감수 경우에만입니다 어떤 물건을 잘게 잘게 자르다)

2

자바에서 int은 32 비트이다. Java에서 byte은 8 비트입니다. 다음 코드를 시도해보십시오 :

byte foo = 5; 
int intFoo = foo; 

Java는 무료로 정보를 잃어 버리지 않기 때문에 프리뷰를 무료로 허용합니다.

4

컨텍스트를 말한다 javadoc에 의해 주어진다 :

는 "입력 스트림에서 다음 바이트의 데이터를 판독 값 바이트 (255)의 경우에 범위는 0에서 int로 반환된다. 스트림의 끝에 도달했기 때문에 사용할 수있는 바이트가 없으면 -1 값이 반환됩니다. " 후드 아래

, 어느 read 메소드는 반환 바이트가 있거나 흐름은 EOF 위치에있다. 따라서 리턴 값은 257 개의 가능한 상태 일 수 있으며 (분명히) byte에 맞지 않습니다. API는 위에서 인용 한 javadoc 발췌에서 지정된대로 인코딩 된 int을 반환하여이를 처리합니다.

나는 코드를보고하지 않은,하지만 나는 그것이 막연하게이 같은 것입니다 예상 :

if (eof) { 
     return -1; 
    } else { 
     // Casting to an int sign extends to 32 bits, 
     // and we then take the bottom 8 bits. 
     return ((int) someByte) & 0xff; 
    } 

그리고 당신은 결과를 얻을 때이 같은 일을 수행해야합니다

int res = is.read(); 
    if (res == -1) { 
     // handle EOF case ... 
    } else { 
     byte b = (byte) res; 
     // handle the byte ... 
    } 

메모리 할당 디자인도 도와주세요.

메모리 할당 문제가 없습니다. byteint 유형은 기본 유형입니다.

관련 문제