ObjectInputStream.read(byte [],int,int)缺少数据?

时间:2012-05-04 04:33:38

标签: java android serialization

我正在尝试序列化/反序列化位图。 android how to save a bitmap - buggy code的答案非常有用。但是,当我去读我的数组时:

private void readObject(ObjectInputStream in) throws IOException,
    ClassNotFoundException {
  int rowBytes = in.readInt();
  int height = in.readInt();
  int width = in.readInt();
  int bmSize = rowBytes * height;    // Ends up being 398208

  ByteBuffer byteBuffer = ByteBuffer.allocate(bmSize);
  int bytesRead = in.read(byteBuffer.array(), 0, bmSize);
  // Use array to create bitmap here
}

它正在读取1008个字节,而不是我写的398208个字节。我用循环替换了调用,这很好用:

for (int i = 0; i < bmSize; i++) {
  byteBuffer.array()[i] = in.readByte();
}

可能出现什么问题?没有异常被抛出。 ObjectInputStream.read(byte[], int, int)的文档表明它应该提前返回的唯一原因是它是否到达流的末尾,这显然不是因为我的解决办法没有抛出任何异常。

1 个答案:

答案 0 :(得分:2)

文档错误。 ObjectInputStream只调用inputStream来读取字节。如果要阻止读取数据,请使用readFully。