다음과 같은 문제가 있습니다. InputStream에서 데이터 시퀀스를 읽어야하지만 자체 배열로 인해 처음 4 바이트를 부호없는 short (16 비트)로 읽어야합니다. 이렇게하면 두 바이트의 두 블록을 읽으십시오. 왜냐하면 그 바이트의 의미가 숫자이기 때문에 나머지 모든 데이터의 의미가 ASCII이기 때문에 부호없는 바이트로 읽어야합니다.InputStream 읽기 문제
누군가가이를 수행하는 방법에 대해 조언 할 수 있습니까?
다음과 같은 문제가 있습니다. InputStream에서 데이터 시퀀스를 읽어야하지만 자체 배열로 인해 처음 4 바이트를 부호없는 short (16 비트)로 읽어야합니다. 이렇게하면 두 바이트의 두 블록을 읽으십시오. 왜냐하면 그 바이트의 의미가 숫자이기 때문에 나머지 모든 데이터의 의미가 ASCII이기 때문에 부호없는 바이트로 읽어야합니다.InputStream 읽기 문제
누군가가이를 수행하는 방법에 대해 조언 할 수 있습니까?
java 자신의 DataInputStream을 사용할 수 있습니다. readInt를 사용하여 처음 4 바이트를 읽을 수 있고 나머지는 readByte 만 읽을 수 있습니다. http://download.oracle.com/javase/6/docs/api/java/io/DataInputStream.html
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..
......
}
참고 : 당신이 하위 비트를 먼저 작성 얻을 것을 순서대로 번호를 썼다 가정.
"처음 4 바이트를 부호없는 short (16 비트)로 읽습니다."=> 4 바이트는 부호없는 short로 읽을 수 없습니다 ...하지만 2 바이트 수 있습니다. 다음의 부호 없음 바이트에 대해서는, InputStream의 plain read() 메소드를 사용하면 (자), Javadoc는 「입력 스트림로부터의 다음의 데이터 바이트를 읽어들입니다. 값의 byte는 0 ~ 255의 범위의 int로서 돌려 주어집니다. –