阅读InputStream的标题问题

时间:2011-08-05 21:52:35

标签: java inputstream

我正在尝试读取InputStream文件的标头。每个标题信息都包含信息。但是,我无法理解读取标题的过程。

例如,我有:

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

来自示例代码。

为什么我只使用sourceFile.read()一次?在这个特定的上下文中,单个|的含义和<< number的含义是什么意思?

感谢您的任何澄清!

2 个答案:

答案 0 :(得分:2)

read()返回int,但它从文件读取一个字节,因此想法是获取前4个字节并将它们转换为32位int(同时更改它们的{{3} }})。

您引用的运算符是二进制和按位运算符。有关详细信息,请参阅endianness

答案 1 :(得分:2)

听起来你在这里得到的术语有点混乱 - 标题是文件的第一部分,但输入流只是用于从该文件读取的流。没有“InputStream文件”。每个文件的标题也不同 - 所有文件都没有标准的“标题格式”。

这段特殊代码正在做的是从文件读取第一个32位整数(需要多次读取,因为每次read()调用只读取一个字节。)

对于&lt;&lt;这是左移位运算符,以及确定要移位的位数之后的数字。数字从8增加到16到24,因为位被移位到正确的位置(一个字节中的8位,所以每次移位的数量增加8。)