【问题标题】:Facing problem from getting double and int value from binary file面临从二进制文件中获取双精度值和整数值的问题
【发布时间】:2010-08-05 12:27:24
【问题描述】:

谁能告诉我如何从二进制文件中获取 double 和 int 值。我已经尝试了很多,但它给了我错误的价值观。这是我的代码。

InputStream iStream = getApplicationContext().getResources().openRawResource(R.raw.map);

    DataInputStream input;

        input = new DataInputStream(iStream);   

            try {                   

double mapFileFormatVersionNumber, IntendedSoftwareVersion;         
int DemoDays;

mapFileFormatVersionNumber =input.readDouble();                     
IntendedSoftwareVersion = input.readDouble();
DemoDays = input.readInt();

提前致谢。

【问题讨论】:

  • 文件从何而来?格式是什么? DataInputStream 文档告诉您 expected 格式 - 但大概这不是您实际文件的格式...
  • 我在 RES 中创建了一个名为 Raw 的文件夹,并将我的文件放入其中。我的文件格式是.AMF(Anquet Map File)。
  • @sajjoo:您有该文件类型规范的链接吗?是否符合 DataInputStream 的预期格式?
  • 其实我知道那个文件的规格。字符串、整数、双精度、浮点数在哪里?我都知道。而且我还在脑海中编写了具有该规范的代码。和字符串结果还可以,但双精度数和整数给了我错误的值。
  • 它们可能具有不同的位长,它们可能具有不同的字节顺序等。请详细说明您的问题,不要让我们阅读以前的问题。总而言之,您希望美国帮助您,而不是相反。所以应该尽我们所能,让我们更容易帮助

标签: java android


【解决方案1】:

整数和双精度数有无数种可能的表示形式。因此,您根本无法期望 DataInputStream 与任何奇怪的二进制格式兼容。您必须通过 .AMF 文件格式的规范并进行自己的转换。

【讨论】:

    【解决方案2】:

    C++ 和 Java 整数类型没有区别。它们都是带符号的 32 位数字类型。但是,它的二进制表示可能会因byte order 而不同。例如,整数可能在文件中以小端字节顺序表示,并且假设它以大端字节顺序读取它会导致错误的数据。如果您不确切知道它是如何存储在文件中的,您可能想尝试字节顺序。看看ByteBufferJava类,它支持不同的字节顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 2011-01-14
      • 2020-03-07
      • 1970-01-01
      相关资源
      最近更新 更多