无法正确读取牛奶形状 3D 二进制文件



我希望你能帮助我:我正试图为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();
        }        
    }
}

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

单独读取每个字节。
char id = (char)input.readUnsignedByte();

相关内容

  • 没有找到相关文章

最新更新