JAVA IO流(二)与网络编程

对象流:ObjectInputStream、ObjectOutputStream

用于存储和读取基本数据类型数据或对象的处理流,强大之处在于把java中的对象写入到数据源,并能把对象中数据源还原回来

还原原理:序列化:用ObjectOutputStream类保存基本类型数据或对象的机制

                  反序列化:用ObjectInputStream类读取基本数据类型或对象的机制

/**
     * 对象流的使用
     * 1.ObjectInputStream和ObjectOutputStream
     * 2.作用:用于存储和读取基本数据类型或对象的处理流。
     *
     *  序列化过程,将内存中的java对象保存到磁盘中或通过网络传输出去
     * 使用ObjectOutputStream实现
     *
     * 反序列化过程:将磁盘中文件的对象还原回为内存中的java对象
     * 使用ObjectInputStream实现
     */

    @Test
    public void testObjectOutputStream() {
        ObjectOutputStream oos = null;
        try {
//            把数据写入到磁盘中
            oos = new ObjectOutputStream(new FileOutputStream("readme1.text"));
            oos.writeObject(new String("我爱北京天安门"));
            oos.flush();//刷新操作
            oos.writeObject(new Person(18,"luck"));
            oos.flush();//刷新操作
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (oos != null) {
                    oos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


    @Test
    public void testObjectInputStream() {
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream("readme1.text"));

            Object obj = ois.readObject();
            String str = (String) obj;
            Person person= (Person) ois.readObject();
            System.out.println(str);
            System.out.println(person);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
        }
        try {
            if (ois != null) {
                ois.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}


/**
 *Person需要满足如下的要求,方可序列化
 * 1,需要实现接口:Serializable
 * 2.当前类提供一个全局常量:seriaLVersionUID
* 注意:static、transient修饰的成员变量不能序列化。
 */
class Person implements Serializable{

    private static final long serialVersionUID = 6728326784846016375L;

    private int age;
    private String name;


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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

字符编码

常见编码表:ASCII:美国标准信息交换码,用一个字节的7位来表示

                     ISO8859-1:拉丁码表、欧洲码表,用一个字节的8位表示

                     GB2312:中国的中文编码表,最多两个字节编码所有字符

                     GBK:中国的中文编码表升级,融合更多中文字符,最多两个字节编码

                     Unicode(16进制):国际标准码,涵盖目前人类所有字符,所有文字都用2个字节表示

                     UTF-8(2进制):变长的编码方式,可用1-4个字节表示字符,兼容ASCII

NIO

java1.4版本开始引入java NIO替代标准的java IOAPI,拥有同样的作用,但方式完全不同。NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作,更加高效的读写文件

java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套是网络编程NIO

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值