我使用以下代码将一个byte [] [] [] []对象写入文件:
byte[][][][] allMaps = new byte[10][8][][];
allMaps = ...;
ObjectOutputStream outputStream = null;
try {
outputStream = new ObjectOutputStream(new FileOutputStream("all_maps"));
outputStream.writeObject(allMaps);
} catch (IOException e) {
...
}
现在我正在尝试将那个byte [] [] [] []对象读入我的Android应用程序:
InputStream inputStream = getResources().openRawResource(
getResources().getIdentifier("raw/all_maps", "raw", getPackageName()) );
try {
byteMaps = (byte[][][][]) ((ObjectInputStream) inputStream).readObject();
} catch (OptionalDataException e) {
...
但是后来我得到了这个错误(在以“byteMaps”开头的行中):
java.lang.ClassCastException: android.content.res.AssetManager$AssetInputStream cannot be cast to java.io.ObjectInputStream
为什么inputStream
类型为AssetInputStream
而不是java.io.InputStream
?
答案 0 :(得分:3)
您通常不会输入强制转换流,而是使用适当的输入/输出流类包装(装饰)它们,以便以更简单的方式读取流的内容。在这里,您必须替换它:
byteMaps = (byte[][][][]) ((ObjectInputStream) inputStream).readObject();
成:
ObjectInputStream oos = new ObjectInputStream(inputStream);
try {
byteMaps = (byte[][][][]) oos.readObject();
答案 1 :(得分:3)
您需要使用' inputStream'创建ObjectInputStream的对象。将inputStream作为ObjectIbputStream的构造函数的参数传递。然后在objectInputStream对象上调用readObject()。希望它有所帮助。