我有一些计算数据(浮点数和整数),写入这样的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”,但文件不包含零。
答案 0 :(得分:0)
问题应该是Linux和Windows之间的换行符不同。正如Clark所提到的,只需将\ n替换为\ r \ n,行尾字符就可以解决这个问题。您可以使用Notpad ++来简化此工作。只需点击菜单:
编辑 - > EOL转换 - >转换为UNIX格式
这也可能是编码问题。如果您使用的是Windows,则默认编码为Windows-1252,称为CP-1252,这是一种特殊的微软功能,在Linux上无法识别。只需将其更改为UTF-8编码即可被所有操作系统识别。使用Notpad ++:
编码 - >转换为UTF-8