2011-02-09 5 views
1

다음과 같은 문제가 있습니다. InputStream에서 데이터 시퀀스를 읽어야하지만 자체 배열로 인해 처음 4 바이트를 부호없는 short (16 비트)로 읽어야합니다. 이렇게하면 두 바이트의 두 블록을 읽으십시오. 왜냐하면 그 바이트의 의미가 숫자이기 때문에 나머지 모든 데이터의 의미가 ASCII이기 때문에 부호없는 바이트로 읽어야합니다.InputStream 읽기 문제

누군가가이를 수행하는 방법에 대해 조언 할 수 있습니까?

+0

"처음 4 바이트를 부호없는 short (16 비트)로 읽습니다."=> 4 바이트는 부호없는 short로 읽을 수 없습니다 ...하지만 2 바이트 수 있습니다. 다음의 부호 없음 바이트에 대해서는, InputStream의 plain read() 메소드를 사용하면 (자), Javadoc는 「입력 스트림로부터의 다음의 데이터 바이트를 읽어들입니다. 값의 byte는 0 ~ 255의 범위의 int로서 돌려 주어집니다. –

답변

0

Java의 부호없는 short는 없으며 java의 모든 숫자는 서명되어 있습니다. unsigned short를 저장하려면 int가 필요합니다. @chicharo가 지적했듯이, unsigned short는 4 바이트가 아닌 2 바이트의 메모리 만 차지합니다.

다음 코드는 당신이 원하는 것을 할 것입니다 :

int number = inputStream.read() | (intputStream.read() << 8); 
byte[] buffer = new byte[2048]; 
int lenRead = 0; 
while ((lenRead = inputStream.read(buffer)) != -1) { 
    // write lenRead bytes each time to somewhere, like a ByteArrayOutputStream.. 
    ...... 
} 

참고 : 당신이 하위 비트를 먼저 작성 얻을 것을 순서대로 번호를 썼다 가정.