INT의 읽기()는 바이트 스트림 클래스 아래로 IOException이
읽기() 바이트를 돌려줍니다 그러나 오류없이 정수로 저장됩니다.
왜 그렇게 되나요 ?? 그리고 어떻게 일어나고 있는지. 나에게 메모리 할당 설계를 도와도
INT의 읽기()는 바이트 스트림 클래스 아래로 IOException이
읽기() 바이트를 돌려줍니다 그러나 오류없이 정수로 저장됩니다.
왜 그렇게 되나요 ?? 그리고 어떻게 일어나고 있는지. 나에게 메모리 할당 설계를 도와도
당신은 당신이 어떤 정보를 풀어 없기 때문에 (당신이 작은 일을 넣을 수 있습니다 (더 바이트를 사용 하나 적은 바이트를 사용하는 원시적에서) 자유롭게 업 캐스트 할 수 있습니다 대형 컨테이너).
당신이 작은 용기에 큰 일을 넣을 때 아래 캐스트 명시 적으로 캐스팅해야 (적은 바이트를 사용 하나 더 바이트를 사용하는 원시적에서) (, 당신은 위험을 감수 경우에만입니다 어떤 물건을 잘게 잘게 자르다)
자바에서 int
은 32 비트이다. Java에서 byte
은 8 비트입니다. 다음 코드를 시도해보십시오 :
byte foo = 5;
int intFoo = foo;
Java는 무료로 정보를 잃어 버리지 않기 때문에 프리뷰를 무료로 허용합니다.
컨텍스트를 말한다 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 ...
}
메모리 할당 디자인도 도와주세요.
메모리 할당 문제가 없습니다. byte
및 int
유형은 기본 유형입니다.
기술적으로 "바이트"는 서명되지 않은 반면 Java의 '바이트'는 서명됩니다. 따라서 8 비트에서와 같이 "바이트"이지만 Java 기본 유형에서와 같이 '바이트'가 아닙니다. –