J2SE第八章——IO输出输出流( DataInputStream、DataOutputStream、序列化)

8. DataInputStream DataOutputStream

         当读写的数据是基本数据类型时使用

         DataOutputStream 和DataInputStream 分别继承自OutputStream和InputStream,属于处理流,  需要分别套接在InputStream和OutputStream类型的节点流上。

public static void m2() {
	try {
		DataOutputStream dos = new DataOutputStream(new FileOutputStream("e:\\a\\02.txt"));
		dos.writeInt(100);   //    d
		dos.writeBoolean(true);
		} catch(FileNotFoundException e) {
			e.printStackTrace();
		} catch(IOException e) {  //是FileNotFoundException的父变量  现抓小的再抓大的
			e.printStackTrace();
		} 
}

dos.writeInt(100) 会转化成100的ASCII码‘d’,并且有前导空格

 

9. Object

         需求:

                   人  name ="zs" ; age = 20; sex ="n"; 

                   PrintWriterpw = new PrintWriter(new FileOutputStream("e:\\02.txt"));

                   pw.println("zs");

                   pw.println(20);

                   ......   将对象分割了,能不能把对象整体读写?

                   ------ObjectOutputStream    ObjectInputStream, 进行对象序列化和反序列化必须实现serializable接口,  transient 修饰的变量不会序列化,不被写入文件,也就是默认值。

public static void m3() {
	try {
		//对象序列化  读
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e:\\a\\02.txt"));
		Person s = new Person("zs",20,"s");
		oos.writeObject(p);
					
		//对象反序列化 写
		ObjectInputStream ois = new ObjectInputStream(new FileOutputStream("e:\\a\\02.txt"));
		Person p2 = (Person) ois.readObject();
		System.out.println(P);


		} catch (Exception e) {
			e.printStackTrace();
		} finally {
		}
}

class Person {
	String name;
	int age;
	String sex;

	public Person(String name,int age,String sex) implements serializable{
		this.name = name;
		this.age =age;
		this.sex = sex;
	}

	public String toString() {
		return name+","+age+","+sex
	}
}

出错:java.io.NotSerializableException:Person  

原因:如果要将一个对象整体与数据源交互,该类必须实现一个接口--Serializeble



你可能感兴趣的:(J2SE第八章——IO输出输出流( DataInputStream、DataOutputStream、序列化))