2011-02-09 23 views
1

私は次のような問題があります。私はInputStreamから一連のデータを読み込む必要がありますが、独自の配列のために最初の4バイトをunsigned short(16ビット)として読み込む必要があります。これらのバイトの意味は数字ですが、その後はすべての残りのデータの意味がASCIIであるため、符号なしバイトとして読み取る必要があるため、2バイトの2ブロックを読み取ります。InputStreamの読み込みに問題があります

誰かがそれを達成する方法について私にアドバイスできますか?

+0

"最初の4バイトを符号なしshort(16ビット)として読み込みます。" => 4バイトはunsigned short ...と読むことはできませんが、2バイトは可能です。次の符号なしバイトについては、InputStreamのプレーンread()メソッドを使用してください:Javadocは "入力ストリームからデータの次のバイトを読み込みます。値のバイトは0から255の範囲のintとして返されます"。 –

答えて

0

Javaの符号なしshort型はありません。javaのすべての数値は符号付きです。符号なし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.. 
    ...... 
} 

注:私はあなたが下位ビットが最初に書き込まれますことを、この順序であなたの番号を書いたと想定。

関連する問題