java - 从二进制文件中读取字符串不会返回任何内容

标签 java string binary binaryfiles

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

信息:

  • 签名是一个字节
  • 版本是一个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: 

我的 map 文件如下所示:

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     

最佳答案

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

关于java - 从二进制文件中读取字符串不会返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24098617/

相关文章:

java - 如何正确配置@Component类

python - 长度为 k 的非重叠子串的随机采样

php - 使用 PHP 或 Javascript 连接 HTML 字符串

binary - 我可以直接用二进制编写程序吗?我怎样才能使计算机执行它?

Java:为什么二进制 OR 不能按预期工作(参见下面的代码)?

java - 在 ubuntu 中格式化 Namenode

java - Android 获取 Fragment 的实际实例

c++ - 字符串 "Hello\0"是否等于 {'H' ,'e' ,'l' ,'l' ,'o' ,'\0' } 或 {'H' ,'e' 0x104 567910 ,'l' ,'l' ,'o'}?

java - 限制这个回文码的处理时间

java - 从动态创建的多个 EditText 读取文本时出错