zoukankan      html  css  js  c++  java
  • Java IO 流 -- 数据流和对象流 DataOutputStream ObjectOutputStream

    DataOutputStream 和 ObjectOutputStream的共同点是:
    1、写出后读取
    2、读取顺序和写出一致

    数据流操作:

    // 写入
    		ByteArrayOutputStream baos = new ByteArrayOutputStream();
    		DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(baos));
    		dos.writeUTF("编码辛酸泪");
    		dos.writeInt(18);
    		dos.writeBoolean(false);
    		dos.writeChar('a');
    		dos.flush();
    		byte[] datas = baos.toByteArray();
    		System.out.println(datas.length);
    		
    		// 写出
    		ByteArrayInputStream bais = new ByteArrayInputStream(datas);
    		DataInputStream dis = new DataInputStream(new BufferedInputStream(bais));
    		String msg = dis.readUTF();
    		int age = dis.readInt();
    		boolean flag = dis.readBoolean();
    		char ch = dis.readChar();
    		System.out.println(ch);
    

    对象流操作:

    对象的写入写入又叫序列化和方序列化,需要注意的是,并不是所有的对象都可以序列化,如果要对对象进行序列化,需要实现 Serializable 接口,如果不想让对象中某个属性序列化,可以使用 transient 关键字标识
    比如我们自己定义一个类:

    class Employee implements Serializable{
    	private transient String name;
    	private double salary;
    	public Employee() {
    	}
    	public Employee(String name, double salary) {
    		super();
    		this.name = name;
    		this.salary = salary;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public double getSalary() {
    		return salary;
    	}
    	public void setSalary(double salary) {
    		this.salary = salary;
    	}
    	
    }
    

    序列化到字节数组:

    // 写出--> 序列化
    		ByteArrayOutputStream baos = new ByteArrayOutputStream();
    		ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(baos));
    		// 操作数据类型
    		oos.writeUTF("编码辛酸泪");
    		oos.writeInt(18);
    		oos.writeBoolean(false);
    		oos.writeChar('a');
    		
    		// 操作对象
    		oos.writeObject("谁解其中味");
    		oos.writeObject(new Date());
    		oos.writeObject(new Employee("马云", 400));
    		oos.flush();
    		byte[] datas = baos.toByteArray();
    		oos.close();
    		
    		// 读取--> 反序列化
    		ByteArrayInputStream bais = new ByteArrayInputStream(datas);
    		ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(bais));
    		
    		String msg = ois.readUTF();
    		int age = ois.readInt();
    		boolean flag = ois.readBoolean();
    		char ch = ois.readChar();
    		System.out.println(age);
    		
    		// 对象还原
    		Object str = ois.readObject();
    		Object date = ois.readObject();
    		Object emp = ois.readObject();
    		if(str instanceof String) {
    			String strObj = (String) str;
    			System.out.println(strObj);
    		}
    		
    		if(date instanceof Date) {
    			Date dateObj = (Date) date;
    			System.out.println(dateObj);
    		}
    		
    		if(emp instanceof Employee) {
    			Employee empObj = (Employee) emp;
    			System.out.println(empObj.getName() + "-->" + empObj.getSalary());
    		}
    		
    		ois.close();
    	}
    

    序列化到文件:

    // 写出--> 序列化
    		ObjectOutputStream oos = new ObjectOutputStream(
    				new BufferedOutputStream(new FileOutputStream("obj.ser")));
    		// 操作数据类型
    		oos.writeUTF("编码辛酸泪");
    		oos.writeInt(18);
    		oos.writeBoolean(false);
    		oos.writeChar('a');
    		
    		// 操作对象
    		oos.writeObject("谁解其中味");
    		oos.writeObject(new Date());
    		oos.writeObject(new Employee("马云", 400));
    		oos.flush();
    		oos.close();
    		
    		// 读取--> 反序列化
    		ObjectInputStream ois = new ObjectInputStream(
    				new BufferedInputStream(new FileInputStream("obj.ser")));
    		
    		String msg = ois.readUTF();
    		int age = ois.readInt();
    		boolean flag = ois.readBoolean();
    		char ch = ois.readChar();
    		System.out.println(age);
    		
    		// 对象还原
    		Object str = ois.readObject();
    		Object date = ois.readObject();
    		Object emp = ois.readObject();
    		if(str instanceof String) {
    			String strObj = (String) str;
    			System.out.println(strObj);
    		}
    		
    		if(date instanceof Date) {
    			Date dateObj = (Date) date;
    			System.out.println(dateObj);
    		}
    		
    		if(emp instanceof Employee) {
    			Employee empObj = (Employee) emp;
    			System.out.println(empObj.getName() + "-->" + empObj.getSalary());
    		}
    		
    		ois.close();
    
    重视基础,才能走的更远。
  • 相关阅读:
    爬虫相关知识(二 )xpath
    爬虫相关知识(一)
    html基础知识
    接口和异常
    继承与多态
    方法与方法重载,方法重写
    面向对象预习随笔
    《深入浅出MFC》第三章 MFC六大关键技术之仿真
    《深入浅出MFC》第二章 C++的重要性质
    《深入浅出MFC》第一章 Win32基本程序概念
  • 原文地址:https://www.cnblogs.com/xzlf/p/12681534.html
Copyright © 2011-2022 走看看