如何将小端二进制文件转换为大端二进制文件?我有一个用C写的二进制文件,我正在用DataInputStream读取这个用Java写的文件,它读的是大端格式。我也看过ByteBuffer类,但不知道如何使用它来得到我想要的结果。请帮帮忙。
非常感谢
发布于 2010-08-09 10:25:38
在谷歌了这么多之后,我发现了一个包含SwappedDataInputStream类的apache Jar文件。org.apache.commons.io.input.SwappedDataInputStream.这个类让我的结果更准确。有关该类的完整详细信息,请参阅。
http://commons.apache.org/io/api-1.4/org/apache/commons/io/input/SwappedDataInputStream.html
发布于 2010-08-09 09:28:33
打开NIO FileChannel:
FileInputStream fs = new FileInputStream("myfile.bin");
FileChannel fc = fs.getChannel();
设置ByteBuffer字节顺序(由get|putInt(),get|putLong(),get|putShort(),get|putDouble()使用)
ByteBuffer buf = ByteBuffer.allocate(0x10000);
buf.order(ByteOrder.LITTLE_ENDIAN); // or ByteOrder.BIG_ENDIAN
从FileChannel读取到ByteBuffer
fc.read(buf);
buf.flip();
// here you take data from the buffer by either of getShort(), getInt(), getLong(), getDouble(), or get(byte[], offset, len)
buf.compact();
要正确处理输入的字节顺序,您需要确切地知道文件中存储了什么内容以及存储顺序(所谓的协议或格式)。
发布于 2010-08-09 08:42:11
您可以从Apache Commons I/O使用EndianUtils
它有像long readSwappedLong(InputStream input)
这样的static
方法,可以为您完成所有的交换操作。它还具有使用byte[]
作为输入的重载,以及write
对应物(到OutputStream
或byte[]
)。它还有一些非I/O方法,比如可以转换纯int swapInteger(int value)
原语的Java方法。
该包还包含许多有用的实用程序类,如FilenameUtils
、IOUtils
等。
另请参阅
https://stackoverflow.com/questions/3438415
复制相似问题