【问题标题】:Reading a String from Binary File returns nothing从二进制文件中读取字符串不返回任何内容
【发布时间】:2014-06-07 15:13:26
【问题描述】:

我尝试编写一个简单的游戏(但我的问题不是那么具体)所以我写了一点MapLoader。目前它只读取文件头并将其打印在屏幕上。

信息:

  • Signature 是 byte
  • Version 是 int
  • length 是 long
  • name 是一个 32 字节长的 String

此外,所有这些都是签名的,因为 Java 中没有未签名的。

但是我有一个函数toString(byte[] array)。它的实现是这样的:

private String toString(byte[] array) {
    char[] buffer = new char[array.length];
    StringBuilder builder = new StringBuilder(array.length);

    for(int i = 0; i < array.length; i++) {
        buffer[i] = (char) array[i];
        builder.append(buffer[i]);
    }
    return builder.toString();
}

我传入data[] 的子数组(保存所有数据)

header.name = toString(Arrays.copyOfRange(data, 11, 32));

但是做的时候

Debugger.debug("Signatur: " +  header.signature);
Debugger.debug("Version: " + header.version);
Debugger.debug("Länge: " + header.length);
Debugger.debug("Name: " + header.name);

我只得到:

Signatur: 86
Version: 1
Länge: 14
Name: 

我的地图文件如下所示:

56 00 00 00 01 00 00 00 00 00 00 00 0E 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 0A     

【问题讨论】:

  • 什么是Debugger?如果是你自己的类,请告诉我们debug 方法。
  • 调试器只是 System.out.println() 的封装。如果调试是否启用,它只是添加一个布尔存储。
  • 如果使用正确的索引和Arrays.copyOfRange ("byte+int+long = "1+4+8 =13 != 11) 是否有效?

标签: java string binary binaryfiles


【解决方案1】:

使用将字节数组作为参数的java.lang.String 构造函数之一,而不是滚动您自己的构造函数。 String 实现可以正确处理所有字符集问题。

【讨论】:

  • 我试过 header.name = new String(Arrays.copyOfRange(data, 11, 32));它没有用,给出了相同的输出
猜你喜欢
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多