我最近决定将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)
最佳答案
如果要使用ObjectInputStream(),则必须使用ObjectOutputStream()。但是,由于ObjectInputStream和ObjectOutputStream是从DataOutputStream和DataInputStream扩展而来的,因此没有任何禁止。
因此,如果您还可以将代码段发布到要写入文件的位置,将很有帮助。还要检查InputStream fis = context.getAssets().open(fileName);
行中的fis是否正确,并且实际上指向您要读取的文件。
关于java - 使用ObjectInputStream从 Assets 读取二进制文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12460566/