2011-02-09 108 views
1

我有以下问题:我必须从InputStream中读取数据序列,但由于它自己的安排,我需要读取前4个字节作为无符号短(16位),这样我将读两个字节的块,因为这些字节的含义是数字,但在此之后,我需要读取一个无符号字节,因为所有其余数据的含义都是ASCII。InputStream读取故障

有人可以告诉我如何做到这一点?

+0

“读取前4个字节为无符号短(16位)”=> 4个字节不能读为无符号短符号...但是2个字节可以。至于下一个无符号字节:只需使用InputStream中的plain read()方法即可:Javadoc表示“从输入流中读取下一个字节的数据,值的字节返回值为int,范围为0到255”。 – 2011-02-09 21:17:22

回答

0

Java中没有未签名的short,Java中的所有数字都已签名,您将需要int来存储未签名的short。正如@chicharo所指出的,一个无符号的short将只占用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.. 
    ...... 
} 

注:我以为你在为了低位得到第一份书面写下你的电话号码。