我曾经使用MappedByteBuffer和FileChannel生成二进制文件:
final Path fullPath = ..
final File parent = fullPath.toFile();
FileChannel out=null;
out = new RandomAccessFile(new File(parent, "myFileName"), "rw").getChannel();
MappedByteBuffer buffer=null;
buffer = out.map(FileChannel.MapMode.READ_WRITE, 0, size);
buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer.putInt(12);
buffer.putFloat(25);
buffer.putFloat(32);
我尝试使用hadoop api生成相同的二进制文件,如下所示:
FileSystem hadoopFileSys= hadoopDataSource.getFileSystem();
FSDataOutputStream outputStream=null;
outputStream = hadoopFileSys.create(hadoopPath);
outputStream.writeInt(12);
outputStream.writeFloat(25);
outputStream.writeFloat(32);
我的问题是使用hadoop api生成的文件与使用nio api生成的文件不相同。
我需要两个生成的文件是相同的,因为它们将由相同的工具解析。
答案 0 :(得分:0)
Hadoop FS使用大端。所以你真的需要使用:
buffer.order(ByteOrder.BIG_ENDIAN);
NIO:
00 00 00 0C 41 C8 00 00 42 00 00 00
的hadoop:
00 00 00 0C 41 C8 00 00 42 00 00 00