我希望你能帮助我: 我正在尝试为Java编写一个Milkshape3D模型加载器。 我找到了Milkshape3D File Format Specification here 然后我按照下面创建了我的代码,我仍然缺少一些类,但是这个问题现在来了;使用DataInputStream对象我应该能够通过我想要的任何数据类型读取文件,比如readChar()我应该能够读取文件头中的所有字符,应该是“MS3D000000”,但是当我使用时readChar()只获取“M”,它返回一个奇怪的符号,即使我跳过前10个字节来读取版本号,它返回一个与3不同的数字!!
我不知道该怎么做,你能解释一下我做错了什么吗? 可以找到该模型here
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();
}
}
}
答案 0 :(得分:4)
readChar
读取两个字节并将它们解释为单个char
- 一个16位UTF-16代码单元。 “怪异符号”大概是U + 4D53,Unicode字符由对应于ASCII M和S的字节表示。您可能需要使用
char id = (char)input.readUnsignedByte();