【问题标题】:Java reading from binary fileJava 从二进制文件中读取
【发布时间】:2015-07-27 00:08:12
【问题描述】:

我有一些计算数据(浮点数和整数),它们被写入这样的 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”,但文件不包含零。

【问题讨论】:

  • 当您在 Ubuntu 上尝试时,这需要写入和读取还是只需要读取(也就是说,您读取的是在 Windows 上运行的应用程序生成的文件)?跨度>
  • 我只是在 Ubuntu 上读到的
  • 如果你在 Ubuntu 上写作和阅读会发生什么?
  • 您可以尝试将 \n 替换为 \r\n 因为行尾字符与 windows 和 linux 不同

标签: java windows ubuntu io binary


【解决方案1】:

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

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

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

编码 -> 转换为 UTF-8

【讨论】:

  • 它是一个二进制文件。没有\n或\r\n
  • 然后用 UTF-8 写你的文件
猜你喜欢
  • 2018-01-16
  • 1970-01-01
  • 2021-07-26
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
相关资源
最近更新 更多