键入将InputStream转换为ObjectInputStream

时间:2015-01-30 17:17:43

标签: java android

我使用以下代码将一个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

2 个答案:

答案 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()。希望它有所帮助。