从二进制文件

时间:2015-05-15 06:47:16

标签: java windows ubuntu io binary

我有一些计算数据(浮点数和整数),写入这样的12mb文件

DataOutputStream os3;
os3 = new DataOutputStream(new FileOutputStream(Cache.class.getResource("/3w.dat").getPath()));
...... (some loops)
     os3.writeFloat(f);
     os3.writeInt(r);
os3.close();

之后我就这样读了

DataInputStream is3;
is3 = new DataInputStream(new FileInputStream(Cache.class.getResource("/3w.dat").getPath()));
...... (same loops)
     is3.readFloat();
     is3.readInt();
is3.close();

所以,我在Windows 7上只编写了一次文件。之后我只在应用程序启动时阅读它。文件读取在Windows 7上工作正常,但是当我尝试在Ubuntu上执行时,我得到EOF异常(代码和文件是相同的)。

我怀疑问题可能是由写入文件的一些NaN值引起的。

顺便说一句。在调试时我发现在ubuntu上读取进程运行大约15%的循环并抛出异常。它读取的所有值都是“0.0”,但文件不包含零。

1 个答案:

答案 0 :(得分:0)

问题应该是Linux和Windows之间的换行符不同。正如Clark所提到的,只需将\ n替换为\ r \ n,行尾字符就可以解决这个问题。您可以使用Notpad ++来简化此工作。只需点击菜单:

  

编辑 - > EOL转换 - >转换为UNIX格式

这也可能是编码问题。如果您使用的是Windows,则默认编码为Windows-1252,称为CP-1252,这是一种特殊的微软功能,在Linux上无法识别。只需将其更改为UTF-8编码即可被所有操作系统识别。使用Notpad ++:

  

编码 - >转换为UTF-8