最终,我找到了一种使其同时运行并更快的方法。使用此方法遇到两个问题:
- 我也应该通过Bitmap.Config参数,否则我无法解码字节数组
- _bmp.compress和_bmp.copyPixelsToBuffer给出了不同的数组,所以我不能使用解码字节数组。
我这样解决了
private void writeObject(ObjectOutputStream oos) throws IOException { oos.defaultWriteObject(); if(_bmp!=null){ int bytes = _bmp.getWidth()*_bmp.getHeight()*4; ByteBuffer buffer = ByteBuffer.allocate(bytes); _bmp.copyPixelsToBuffer(buffer); byte[] array = new byte[bytes]; // looks like this is extraneous memory allocation if (buffer.hasArray()) { try{ array = buffer.array(); } catch (BufferUnderflowException e) { e.printStackTrace(); } } String configName = _bmp.getConfig().name(); oos.writeObject(array); oos.writeInt(_bmp.getWidth()); oos.writeInt(_bmp.getHeight()); oos.writeObject(configName); } else { oos.writeObject(null); }}private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException{ ois.defaultReadObject(); byte[] data = (byte[]) ois.readObject(); if (data != null) { int w = ois.readInt(); int h = ois.readInt(); String configName = (String) ois.readObject(); Bitmap.Config configBmp = Bitmap.Config.valueOf(configName); Bitmap bitmap_tmp = Bitmap.createBitmap(w, h, configBmp); ByteBuffer buffer = ByteBuffer.wrap(data); bitmap_tmp.copyPixelsFromBuffer(buffer); _bmp = bitmap_tmp.copy(configBmp,true); bitmap_tmp.recycle(); } else { _bmp = null; }}这对我来说足够快-比bmp.compress方式快15倍。希望这可以帮助 :)



