对象的序列化:目的:将一个具体的对象进行持久化,写入到硬盘上。 注意:静态数据不能被序列化,因为静态数据不在堆内存中,是存储在静态方法区中。 如何将非静态的数据不进行序列化?用transient 关键字修饰此变量即可。 Serializable:用于启动对象的序列化功能,可以强制让指定类具备序列化功能,该接口中没有成员,这是一个标记接口。这个标记接口用于给序列化类提供UID。这个uid是依据类中的成员的数字签名进行运行获取的。如果不需要自动获取一个uid,可以在类中,手动指定一个名称为serialVersionUID id号。依据编译器的不同,或者对信息的高度敏感性。最好每一个序列化的类都进行手动显示的UID的指定。 import java.io.*; class ObjectStreamDemo { public static voidmain(String[] args) throws Exception{ writeObj(); readObj(); } public static voidreadObj()throws Exception{ ObjectInputStream ois = newObjectInputStream(new FileInputStream("obj.txt")); Object obj = ois.readObject();//读取一个对象。 System.out.println(obj.toString()); } public static voidwriteObj()throws IOException{ ObjectOutputStream oos = newObjectOutputStream(new FileOutputStream("obj.txt")); oos.writeObject(newPerson("lisi",25)); //写入一个对象。 oos.close(); } } class Person implements Serializable{ private static finallong serialVersionUID = 42L; private transient Stringname;//用transient修饰后name将不会进行序列化 public int age; Person(String name,intage){ this.name = name; this.age = age; } public StringtoString(){ return name+"::"+age; } } DataOutputStream、DataInputStream:专门用于操作基本数据类型数据的对象。 DataOutputStream dos = new DataOutputStream(newFileOutputStream("data.txt")); dos.writeInt(256); dos.close(); DataInputStream dis =new DataInputStream(new FileInputStream("data.txt")); int num =dis.readInt(); System.out.println(num); dis.close(); ByteArrayInputStream:源:内存 ByteArrayOutputStream:目的:内存。 这两个流对象不涉及底层资源调用,操作的都是内存中数组,所以不需要关闭。 直接操作字节数组就可以了,为什么还要把数组封装到流对象中呢?因为数组本身没有方法,只有一个length属性。为了便于数组的操作,将数组进行封装,对外提供方法操作数组中的元素。 对于数组元素操作无非两种操作:设置(写)和获取(读),而这两操作正好对应流的读写操作。这两个对象就是使用了流的读写思想来操作数组。 //创建源: ByteArrayInputStreambis = new ByteArrayInputStream("abcdef".getBytes()); //创建目的: ByteArrayOutputStreambos = new ByteArrayOutputStream(); int ch = 0; while((ch=bis.read())!=-1){ bos.write(ch); } System.out.println(bos.toString());
相关文章
- 12-19黑马程序员JAVA篇--GUI
- 12-19黑马程序员JAVA篇--泛型
- 12-19黑马程序员JAVA篇--网络编程总结
- 12-19黑马程序员JAVA篇--多线程总结
- 12-19黑马程序员JAVA篇--IO序列化
- 12-19黑马程序员JAVA篇--面向对象
- 12-19黑马程序员JAVA篇--集合框架
- 12-19黑马程序员JAVA篇--String类的方法总结
- 12-19黑马程序员JAVA篇---IO总结
- 12-19黑马程序员JAVA基础加强--枚举