我最近开始学习Java,因为我真的是那种学习手头任务更快的人,我决定用C#编写一个小应用程序并用Java创建一个等价的。
也许我应该从较小的任务开始,但是因为我已经开始设计它(C#app编写得不是很好,因此在功能方面创建了一个等效的应用程序,而不是设计和结构),我不知道感觉好像放弃了我的想法。
嗯,正如你现在可能已经意识到的那样,读到这个,我被困住了。该应用程序是一种编辑器,它对存储在二进制文件中的数据起作用。我目前无法弄清楚的是如何阅读这个文件(有一件事是阅读)和解析(提取)我需要的数据。我知道这个文件的结构。所以这是我正在寻找的东西:
我应该也提到我可能需要在处理之前将整个文件加载到内存中!该文件为2MB。
在处理二进制文件和流时,我常常迷路:x
我想我在此期间想出来了。我需要首先验证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());
由于我刚开始阅读此内容,使用此方法有任何副作用吗?有更好的方法吗?