InputStream读麻烦

时间:2011-02-09 21:06:45

标签: java inputstream

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

有人可以就如何做到这一点向我提出建议吗?

2 个答案:

答案 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..
    ......
}

注意:我假设你按照这个顺序编写了你的​​数字,首先写下较低位。