2011-02-09 3 views
1

У меня есть следующая проблема: мне нужно прочитать из InputStream последовательность данных, но из-за ее собственной компоновки мне нужно прочитать первые 4 байта как unsigned short (16 бит), чтобы таким образом я прочитайте два блока из двух байтов, потому что значение этих байтов - это числа, но после этого мне нужно читать как беззнаковый байт, потому что смысл всех оставшихся данных - ASCII.Ошибка чтения InputStream

Кто-нибудь может посоветовать мне, как это осуществить?

+0

«читать первые 4 байта как unsigned short (16 бит)» => 4 байта не могут быть прочитаны как unsigned short ... но 2 байта. Что касается следующего байта без знака: просто используйте метод plain read() из InputStream: Javadoc говорит: «Считывает следующий байт данных из входного потока. Байт значения возвращается как int в диапазоне от 0 до 255». –

ответ

0

В Java нет беззнакового кода, все числа в java подписаны, вам понадобится int для хранения unsigned short. и, как отметил @chicharo, беззнаковый короткий будет занимать только 2 байта памяти, а не 4 байта.

Следующий код будет делать то, что вы хотите:

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.. 
    ...... 
} 

Примечание: Я предположил, что вы написали свой номер в таком порядке, что младшие биты пишутся первым.

Смежные вопросы