当前位置:编程学习 > wap >>

关于android的Serializable问题

public void save(){
String tmpfile = "/mnt/sdcard/1234.txt";
KeyFrameInfo flashMotionInfoCache  = new KeyFrameInfo();

try {
File f = new File(tmpfile);
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(flashMotionInfoCache);
    oos.flush();
    oos.close();
    
    fos.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


public class KeyFrameInfo implements java.io.Serializable
{
    private static final long serialVersionUID = 1L;
    public int bBlank;
    public float aca;
}


在oos.writeObject(flashMotionInfoCache);会抛异常,java.io.NotSerializableException:xxx
何解? android Serializable 异常 java --------------------编程问答-------------------- 1期待结果。
2楼主明白了,共勉一下。 --------------------编程问答-------------------- help!!!! --------------------编程问答-------------------- 和我看到的不一样嘛
发:
 ByteArrayOutputStream output = new ByteArrayOutputStream();
        try {
          new ObjectOutputStream(output).writeObject(flashMotionInfoCache);
          return output.toByteArray();
        } catch(IOException e) {
          return null;
        }

收:
new ObjectInputStream(
new ByteArrayInputStream(上面返回的byte[])).readObject();
--------------------编程问答--------------------
引用 3 楼 guoyoulei520 的回复:
和我看到的不一样嘛
发:
 ByteArrayOutputStream output = new ByteArrayOutputStream();
        try {
          new ObjectOutputStream(output).writeObject(flashMotionInfoCache);
          return output.toByteArray();
        } catch(IOException e) {
          return null;
        }

收:
new ObjectInputStream(
new ByteArrayInputStream(上面返回的byte[])).readObject();


没明白,兄弟要表达啥意思? --------------------编程问答-------------------- 对象没有序列化  所以不能这样读写  需要实现序列化 (貌似Parcel接口也可以) --------------------编程问答--------------------
引用 5 楼 tanwei4199 的回复:
对象没有序列化  所以不能这样读写  需要实现序列化 (貌似Parcel接口也可以)


引用 2 楼 Oo_Oo_ 的回复:
help!!!!


内部类不能序列化,两种改法,将内部类改成静态类
	public static  class KeyFrameInfo implements java.io.Serializable
{
    private static final long serialVersionUID = 1L;
    public int bBlank;
    public float aca;
}


第二种方法就是把KeyFrameInfo单独作为一个类,不要写成内部类 --------------------编程问答-------------------- 不知道楼主做过C#的网络收发类对象的项目没,要收发的类都需要序列化和反序列化

而你问的知识点是这样的:


oos.writeObject(flashMotionInfoCache);


ObjectInputStream 与 ObjectOutputStream 类所读写的对象必须实现了 Serializable 接口。
需要注意的是:对象中的 transient 和 static 类型的成员变量也不会被读取和写入 。

只要让这个类  implements Serializable 即可
就相当于一个“通行证”一样,你这个类具备了这个Serializable,就可以被 ObjectInputStream 与 ObjectOutputStream 类操作了~~~~

个人理解,讲得不好勿喷~~~
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,