我有以下问题:我必须从InputStream中读取数据序列,但由于它自己的安排,我需要读取前4个字节作为无符号短(16位),这样我将读两个字节的块,因为这些字节的含义是数字,但在此之后,我需要读取一个无符号字节,因为所有其余数据的含义都是ASCII。InputStream读取故障
有人可以告诉我如何做到这一点?
我有以下问题:我必须从InputStream中读取数据序列,但由于它自己的安排,我需要读取前4个字节作为无符号短(16位),这样我将读两个字节的块,因为这些字节的含义是数字,但在此之后,我需要读取一个无符号字节,因为所有其余数据的含义都是ASCII。InputStream读取故障
有人可以告诉我如何做到这一点?
您可以使用java自己的DataInputStream。您可以使用readInt读取前4个字节,其余的只读readByte ...请参阅http://download.oracle.com/javase/6/docs/api/java/io/DataInputStream.html
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..
......
}
注:我以为你在为了低位得到第一份书面写下你的电话号码。
“读取前4个字节为无符号短(16位)”=> 4个字节不能读为无符号短符号...但是2个字节可以。至于下一个无符号字节:只需使用InputStream中的plain read()方法即可:Javadoc表示“从输入流中读取下一个字节的数据,值的字节返回值为int,范围为0到255”。 – 2011-02-09 21:17:22