我有一个返回jpg的Web服务。我将这个jpg读入一个byte [],转换为Bitmap,并将其保存到SD卡。下次用户访问此活动时,它将在访问Web服务之前搜索SD卡以查看该图像是否存在。
但是,如果文件存在,检查SD卡的代码将返回StreamCorruptedException。
这是我写入SD卡的代码:
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String root = Environment.getExternalStorageDirectory().toString();
new File(root + "/images").mkdirs();
try {
File file = new File(root + "/images", Integer.toString(intImageId) + "m.jpg");
FileOutputStream os = new FileOutputStream(file);
Bitmap theImageFromByteArray = BitmapFactory.decodeByteArray(image, 0, image.length);
theImageFromByteArray.compress(Bitmap.CompressFormat.JPEG, 80, os);
os.flush();
os.close();
}
catch (FileNotFoundException e) {
}
catch (IOException e) {
}
}
以下是检查SD卡现有图像的代码:
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
|| Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
try {
File file = new File(Environment.getExternalStorageDirectory() + "/images", Integer.toString(mImageId) + "m.jpg");
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
mImage = (Bitmap)ois.readObject();
ois.close();
}
catch (Exception e) {
}
}
异常发生在新的ObjectInputStream(fis)
期间答案 0 :(得分:0)
考虑到ObjectInputStream构造函数中发生异常,我怀疑您编写的文件有问题。看看this。编写和阅读图像的方法略有不同。
答案 1 :(得分:0)
你不能像这样任意readObject()。需要使用writeObject()以便readObject()检测有效的序列化对象。