我有以下问题:我必须从InputStream中读取一系列数据,但由于它自己的排列,我需要读取前4个字节作为无符号短路(16位),这样我就会读取两个块两个字节,因为这些字节的含义是数字,但之后我需要读取无符号字节,因为所有剩余数据的含义都是ASCII。
有人可以就如何做到这一点向我提出建议吗?
答案 0 :(得分:0)
您可以使用java自己的DataInputStream。您可以使用readInt读取前4个字节,其余只使用readByte ...请参阅http://download.oracle.com/javase/6/docs/api/java/io/DataInputStream.html
答案 1 :(得分:0)
Java中没有unsigned short,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..
......
}
注意:我假设你按照这个顺序编写了你的数字,首先写下较低位。