Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ObjectInputStream.read(字节[],int,int)缺少数据?_Java_Android_Serialization - Fatal编程技术网

Java ObjectInputStream.read(字节[],int,int)缺少数据?

Java ObjectInputStream.read(字节[],int,int)缺少数据?,java,android,serialization,Java,Android,Serialization,我正在尝试序列化/反序列化位图。网站上的答案非常有用。但是,当我读取数组时: private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { int rowBytes = in.readInt(); int height = in.readInt(); int width = in.readInt(); int bmSize = rowBytes * he

我正在尝试序列化/反序列化位图。网站上的答案非常有用。但是,当我读取数组时:

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();
}
for(int i=0;i

出了什么问题?没有抛出异常。的文档指出了它应该提前返回的唯一原因是它是否到达流的末尾,这显然不是因为我的工作没有引发任何异常。

文档是错误的。ObjectInputStream只调用inputStream来读取字节。如果希望它在读取数据之前一直阻塞,请使用readFully。

如果它工作正常,为什么不使用loop。它没有必要一次读取所有数据loop工作正常,我只是想知道内置方法不工作的原因。我还怀疑合适的方法会更快——它可能能够使用本机调用等+1。谷歌的文档不仅是错误的,而且毫无意义。它表示在读取
count
字节之前一直阻塞,而不定义
count
。Javadoc是正确的。非常感谢!我已经在上发布了更新的文档。