我最近开始学习Java,因为我真的是那种在手中完成任务的人,我决定用一个用C#编写的小应用程序来创建Java中的等价物 .

也许我应该从较小的任务开始,但是因为我已经开始设计它(C#应用程序编写得不是很好,因此在功能方面创建了一个等效的应用程序,而不是设计和结构),我不想放弃我的想法 .

嗯,正如你现在可能已经意识到的那样,读到这个,我被困住了 . 该应用程序是一种编辑器,它对存储在二进制文件中的数据起作用 . 我目前无法弄清楚的是如何阅读这个文件(有一件事是阅读)和解析(提取)我需要的数据 . 我知道这个文件的结构 . 所以这是我正在寻找的东西:

  • 如何访问存储在文件中的二进制数据(在C#中我会使用BinaryReader)

  • 如何处理Java中不可用的基元(uint8_t,uint16_t,因为文件是在C中创建的)

编辑

我应该也提到我可能需要在处理之前将整个文件加载到内存中!该文件是2MB .

在处理二进制文件和流时,我通常会迷路:x

编辑2

我想在此期间我想出来了 . 我需要首先验证4字节签名 . 所以我这样做:

byte[] identifier = {'A', 'B', 'C', 'D'};
fs = new FileInputStream(filename);
byte[] extractedIdentifier = new byte[4];
if(4 != fs.read(extractedIdentifier)) {
    throw new Exception();
}

if(!Arrays.equals(identifier, extractedIdentifier)) {
    throw new Exception();
}

在此之后我无论如何都需要整个文件,所以我发现 MappedByteBuffer https://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html我认为我会调查,因为它看起来似乎是乍一看的完美解决方案 .

FileChannel fc = fs.getChannel();
MappedByteBuffer buf = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());

由于我刚刚开始阅读此内容,使用此方法有任何副作用吗?有一个更好的方法吗?