我正在尝试读取InputStream
文件的标头。每个标题信息都包含信息。但是,我无法理解读取标题的过程。
例如,我有:
InputStream sourceFile = //.... stuff.
sourceFile.read() | (sourceFile.read() << 8) | (sourceFile.read() << 16)
| (sourceFile.read() << 24)
来自示例代码。
为什么我只使用sourceFile.read()
一次?在这个特定的上下文中,单个|
的含义和<< number
的含义是什么意思?
感谢您的任何澄清!
答案 0 :(得分:2)
read()
返回int
,但它从文件读取一个字节,因此想法是获取前4个字节并将它们转换为32位int(同时更改它们的{{3} }})。
您引用的运算符是二进制和按位运算符。有关详细信息,请参阅endianness。
答案 1 :(得分:2)
听起来你在这里得到的术语有点混乱 - 标题是文件的第一部分,但输入流只是用于从该文件读取的流。没有“InputStream文件”。每个文件的标题也不同 - 所有文件都没有标准的“标题格式”。
这段特殊代码正在做的是从文件读取第一个32位整数(需要多次读取,因为每次read()调用只读取一个字节。)
对于&lt;&lt;这是左移位运算符,以及确定要移位的位数之后的数字。数字从8增加到16到24,因为位被移位到正确的位置(一个字节中的8位,所以每次移位的数量增加8。)