2

我希望你能帮我解决这个问题:我正在尝试为 Java 编写一个 Milkshape3D 模型加载器。我在这里找到了 Milkshape3D 文件格式规范, 并按照它创建了我的代码,如下所示,我仍然缺少一些类,但是这个问题现在出现了;使用 DataInputStream 对象,我应该能够通过我想要的任何数据类型读取文件,例如使用 readChar() 我应该能够读取文件头中的所有字符,应该是“MS3D000000”,但是当我使用readChar() 只获取“M”,它返回一个奇怪的符号,即使我跳过前 10 个字节来读取版本号,它返回一个与 3 非常不同的数字!!

我不知道该怎么办,你能解释一下我做错了什么吗?该模型可以在这里找到

package milkshape3d_loader;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;

class ms3d_header_t {
    char[]  id;         // always "MS3D000000"
    int     version;    // 3
    ms3d_header_t() {
        id = new char[] {'M','S','3','D','0','0','0','0','0','0'};
        version = 3;
    }
}

public class Milkshape3D_Loader {

    public static void main(String[] args) {

        try {
            File inFile = new File ("dy_joey.ms3d");
            FileInputStream inStream = new FileInputStream (inFile);
            DataInputStream input = new DataInputStream (inStream);

            char id = input.readChar();
            System.out.println (id);

        }

        catch (Exception e) {
        System.out.println (e.getMessage());
        e.printStackTrace();
        }        
    }
}
4

1 回答 1

4

readChar读取两个字节并将它们解释为char一个 16 位 UTF-16 代码单元。“奇怪的符号”大概是 U+4D53,由对应于 ASCII M 和 S 的字节表示的 Unicode 字符。您可能需要使用单独读取每个字节

char id = (char)input.readUnsignedByte();
于 2013-01-14T20:26:04.383 回答