2011-08-05 28 views
0

我试图读取InputStream文件的标题。每个标题信息都包含信息。但是,我很难理解阅读标题的过程。读取InputStream的标题问题

例如,我有:

InputStream sourceFile = //.... stuff. 
sourceFile.read() | (sourceFile.read() << 8) | (sourceFile.read() << 16) 
     | (sourceFile.read() << 24) 

来自示例代码。

为什么我不使用sourceFile.read()一次?单一的|意味着什么?<< number在这个特定的上下文中是什么意思?

感谢您的任何澄清!

+0

'header'是什么意思? – nes1983

回答

2

read()回报int,但它从文件中读取一个字节,这样的想法是让前4个字节,并将其转换为32位int(而改变其endianness)。

您提到的操作符是二进制和位运算符。请参阅here了解更多信息。

+0

谢谢!但为什么大端意味着什么,为什么4个字节?有像8,16和24这样的数字,但是来自4的数字是什么? – Curtain

+1

第一个('sourceFile.read()')是0 :)的移位。请阅读我给你的链接。 – MByD

+0

谢谢,我会研究他们。 :-) – Curtain

2

听起来好像你在这里得到了一些困惑 - 头文件是文件的第一部分,但输入流只是用于从该文件中读取的流。没有“InputStream文件”。每个文件的标题也不同 - 所有文件都没有标准的“标题格式”。

什么,似乎这个代码特定部分所做的工作从文件中读取第32位整数(多读是必要的,因为每个read()调用只读取一个字节。)

在条款< <,这是一个左移运算符,它后面的数字决定了要移位的位数。数字从8增加到16到24,因为这些位正在移位到正确的位置(一个字节中有8位,所以移位的次数每次增加8)。

+0

感谢您的回答和解释! :-) – Curtain