我正在以以下方式读取二进制文件:
我觉得我需要每次获取4个字节,并执行一个"字节"操作(例如>> << >>&FF之类的操作)来创建新的int。
这个操作的习语是什么?
编辑
哎呀,这有点复杂(解释起来)。
我正在尝试读取一个文件(可能是ascii,二进制,都无所谓),并提取其中可能有的整数。
例如,假设二进制内容(在基数2中):
InputStream in = new FileInputStream( file );
byte[] buffer = new byte[1024];
while( ( in.read(buffer ) > -1 ) {
int a = // ???
}
我想做的是读取最多4个字节并从中创建一个int值,但我不知道该如何做。我觉得我需要每次获取4个字节,并执行一个"字节"操作(例如>> << >>&FF之类的操作)来创建新的int。
这个操作的习语是什么?
编辑
哎呀,这有点复杂(解释起来)。
我正在尝试读取一个文件(可能是ascii,二进制,都无所谓),并提取其中可能有的整数。
例如,假设二进制内容(在基数2中):
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000010
整数表示应该是1
,2
,对吧? :- / 前32位为1,后32位为2。11111111 11111111 11111111 11111111
会是 -1
和
01111111 11111111 11111111 11111111
最大值为 Integer.MAX_VALUE (2147483647)
(array[i] << 24) | ((array[i + 1] & 0xff) << 16) | ((array[i + 2] & 0xff) << 8) | (array[i + 3] & 0xff)
(即,不先转换为short
),它与ByteBuffer
解决方案一样有效。我猜它可能被优化为一个常见的模式。 - john16384