代码改变世界

转换流_序列化流

转换流

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class IOStreamRW {
    public static void main(String[] args) throws IOException {
     //字符—>字节
        //Java底层调用FileOutputStream以字节形式写出数据
        //OutputStreamWriter将传入的字符转化为字节
        OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream("E:\\a.txt"),"utf-8");    //这里可以规定解析时的编码
        ow.write("abcdefgszbjkffasgszbjzxnbzlkzlxzkj");
        ow.close();
     //字节—>字符
        //Java底层调用FileInputStream以字节形式读取数据
        //InputStreamReader将读取到的字节转化为字符
        InputStreamReader ir = new InputStreamReader(new FileInputStream("E:\\a.txt"));
        //定义一个字符数组来存储读取到的字节数据
        char[] c = new char[10];
        int len = -1;
        //读取到字节数据后以字符形式输出
        while((len = ir.read(c))!=-1){
            System.out.println(new String(c, 0, len));
        }
        ir.close();
    }
}

序列化流

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class SerializableDemo {
    public static void main(String[] args) throws Exception{
    //序列化
    //对象—>字节
        Person p = new Person();
        p.setName("伍六七");
        p.setAge(18);
  p.setId("零零柒");
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:\\d.data"));
        oos.writeObject(p);
        oos.close();
        /*
    //反序列化
    //字节—>对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\\d.data"));    //读取文件中字节数据,然后用ObjectInputStream将字节数据转换为对象
        Person p = (Person)ois.readObject();
        ois.close();
        System.out.println(p.getName());
        System.out.println(p.getAge());
        */
    }
}
//创建Person类提供get_set方法
//一个对象想要被序列化,它所对应的类必须实现Serializable接口
class Person implements Serializable{
  //版本号
  //没有手动指定版本号,会自动计算一个版本号
  //为了让序列化出去的对象可以反序列回来,需要手动指定版本号,防止类中对象发生改变造成数据丢失
  private static final long serialVersionUID = -5209149214681656519L;
    private String name;
    private int age;
  //用static/transient修饰的属性不会被序列化,不占内存
  //static修饰后本身不需要被序列化,transient则是强制不被序列化
  static String id;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
  public int getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
}

注:集合不允许被一次性序列化出去,即一次只能序列化一个对象

posted @ 2018-07-26 20:52  Tracy21  阅读(190)  评论(0编辑  收藏  举报