私は次のような問題があります。私はInputStreamから一連のデータを読み込む必要がありますが、独自の配列のために最初の4バイトをunsigned short(16ビット)として読み込む必要があります。これらのバイトの意味は数字ですが、その後はすべての残りのデータの意味がASCIIであるため、符号なしバイトとして読み取る必要があるため、2バイトの2ブロックを読み取ります。InputStreamの読み込みに問題があります
誰かがそれを達成する方法について私にアドバイスできますか?
私は次のような問題があります。私はInputStreamから一連のデータを読み込む必要がありますが、独自の配列のために最初の4バイトをunsigned short(16ビット)として読み込む必要があります。これらのバイトの意味は数字ですが、その後はすべての残りのデータの意味がASCIIであるため、符号なしバイトとして読み取る必要があるため、2バイトの2ブロックを読み取ります。InputStreamの読み込みに問題があります
誰かがそれを達成する方法について私にアドバイスできますか?
java独自のDataInputStreamを使用できます。最初の4バイトはreadIntを使用して残りの部分はreadByteだけを使用して読み取ることができます。http://download.oracle.com/javase/6/docs/api/java/io/DataInputStream.html
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..
......
}
注:私はあなたが下位ビットが最初に書き込まれますことを、この順序であなたの番号を書いたと想定。
"最初の4バイトを符号なしshort(16ビット)として読み込みます。" => 4バイトはunsigned short ...と読むことはできませんが、2バイトは可能です。次の符号なしバイトについては、InputStreamのプレーンread()メソッドを使用してください:Javadocは "入力ストリームからデータの次のバイトを読み込みます。値のバイトは0から255の範囲のintとして返されます"。 –