1

最近、速度を上げるために3Dモデル形式をASCIIではなくバイナリファイルに変換することにしました...いくつかのJavaチュートリアルを読みましたが、形式を読み取る最も簡単な方法はObjectInputStreamとreadLong()コマンドとreadFloat()コマンドが混在しています...しかし、コードを機能させることができないようです...

これが私のテストコードです:

void testLoadBin(String fileName, Context context){
try {
    InputStream fis = context.getAssets().open(fileName);
    ObjectInputStream is = new ObjectInputStream(fis);
    long test;
    test = is.readLong();
    Log.i("World", "output" + test);
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Log.i("World", "ERROR");
    }
}

この例では、ファイルから最初のLONGを読み取ろうとしていますが、IOExceptionが常にスローされ、これを修正するために何をすべきかわかりません。

どんな助けでも役に立ちます。


クイック追加:スタックトレースエラー出力:

09-18 00:16:08.559: INFO/World(3861): java.io.StreamCorruptedException
09-18 00:16:08.559: INFO/World(3861):     at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2369)
09-18 00:16:08.559: INFO/World(3861):     at java.io.ObjectInputStream.<init>(ObjectInputStream.java:433)
09-18 00:16:08.559: INFO/World(3861):     at org.ogl.ndkvbo.Screen.testLoadBin(Screen.java:6605)
09-18 00:16:08.559: INFO/World(3861):     at org.ogl.ndkvbo.camState_intload.update(camState_intload.java:24)
09-18 00:16:08.559: INFO/World(3861):     at org.ogl.ndkvbo.StateMachine.update(StateMachine.java:65)
09-18 00:16:08.559: INFO/World(3861):     at org.ogl.ndkvbo.camera.update(camera.java:46)
09-18 00:16:08.559: INFO/World(3861):     at org.ogl.ndkvbo.GameThread.run(GameThread.java:50)
4

1 に答える 1

2

ObjectInputStream()を使用する場合は、ObjectOutputStream()を使用する必要があります。ただし、ObjectInputStreamとObjectOutputStreamがDataOutputStreamとDataInputStreamから拡張されるため、何も禁止されていません。

したがって、ファイルに書き込んでいる場所にコードスニペットを投稿することもできれば便利です。また、行のfisInputStream fis = context.getAssets().open(fileName);が正しく、実際に読み取るファイルを指しているかどうかを確認します。

于 2012-09-17T13:59:05.327 に答える