2

これで私を助けてくれることを願っています: Java 用の Milkshape3D モデル ローダーを作成しようとしています。私はここでMilkshape3D File Format Specificationを見つけ、 それに従ってコードを以下のように作成しました。DataInputStream オブジェクトを使用すると、readChar() のように、必要なデータ型でファイルを読み取ることができるはずです。ファイル ヘッダーのすべての文字を読み取ることができるはずです。 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

readCharchar2バイトを読み取り、それらを1つ(16ビットUTF-16コード単位)として解釈します。「奇妙な記号」はおそらくU+4D53であり、ASCII MおよびSに対応するバイトで表されるUnicode文字です。おそらく、を使用して各バイトを個別に読み取る必要があります。

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