使用hadoop文件系统org.apache.hadoop.fs.filesystem编写二进制文件

xienkqul  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(414)

我曾经使用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);

我的问题是,使用hadoopapi生成的文件与使用nioapi生成的文件不一致。
我需要两个genrated文件是相同的,因为他们将由相同的工具解析。

ocebsuys

ocebsuys1#

hadoopfs使用big-endian。所以你真的需要使用:

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

相关问题