将InputStream强制转换为ObjectInputStream

3

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

4

通常情况下,您不需要对流进行强制类型转换,而是使用适当的输入/输出流类来包装(修饰)它们以便更轻松地读取流的内容。在这里,您需要将以下代码替换为:

byteMaps = (byte[][][][]) ((ObjectInputStream) inputStream).readObject();

into:

ObjectInputStream oos = new ObjectInputStream(inputStream);
try {
    byteMaps = (byte[][][][]) oos.readObject();

3
您需要使用'inputStream'创建ObjectInputStream对象。将inputStream作为参数传递给ObjectInputStream的构造函数。然后在objectInputStream对象上调用readObject()方法。希望这可以帮助您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接