使用ObjectInputStream从资产中读取二进制文件

时间:2012-09-17 13:44:02

标签: java android binaryfiles objectinputstream

我最近决定将我的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)

1 个答案:

答案 0 :(得分:2)

如果要使用ObjectInputStream(),则必须使用ObjectOutputStream()。但是,没有什么禁止你,因为ObjectInputStream和ObjectOutputStream从DataOutputStream和DataInputStream扩展。

因此,如果您还可以将代码段发布到写入文件的位置,那将会很有帮助。同时检查行InputStream fis = context.getAssets().open(fileName);中的fis是否正确,并且实际指向您要读取的文件。