面向对象——IO其他流

目录

一、转换流

1、转换流概述:转换流就是在字节和字符之间起桥接作用的流

2、提供的转换流:

二、对象操作流 

1、对象操作流的特点 

2、对象操作流 

3、对象操作流出现的问题: 

三、Properties 

1、Properties概述: 

2、 Properties和IO流结合方法:


一、转换流

1、转换流概述:转换流就是在字节和字符之间起桥接作用的流

2、提供的转换流:

  • InputStreamReader:将一个字节的输入流转换为一个字符的输入流;
  • OutputStreamWriter:将一个字符的输出流转换为一个字节的输出流;

 例子:

public void readerFileToUTF8(){
        try (InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("转换流.txt"),"UTF-8")){
            char [] data = new char[128];
            int length = inputStreamReader.read(data);
            String content = new String(data,0,length);
            System.out.println("编码为UTF-8内容:");
            System.out.println(content);
        } catch(IOException e) {
            e.printStackTrace();
        }
    }

二、对象操作流 

1、对象操作流的特点 

可以把对象以字节的形式写到本地文件,直接打开文件,是读不懂的,需要再次用对象操作流读到内存中。

2、对象操作流 

  • 对象操作输入流:ObjectInputStream ;
  • 对象操作输出流:ObjectOutputStream;
  • 对象序列化:就是将对象写到本地文件中,或者在网络中传输对象;
  • 对象反序列化:把写到本地文件中的对象读到内存中,或者接收网络中传输的对象

反序列化例子:

public void SerFile2Object() {
        try(ObjectInputStream inputStream =
                    new ObjectInputStream(new FileInputStream("D:\\idea Project\\Study-2\\day01-base\\person.ser"))){
            Person person = (Person) inputStream.readObject();
            System.out.println(person);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

3、对象操作流出现的问题: 

  • 修改了Javabean类后会出现问题:会抛出InvalidClassException异常;
  • 解决方法:给对象所属的类加一个serialVersionUID:private static final long serialVersionUID = 42L;
  • 该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程;

三、Properties 

1、Properties概述: 

  • 是一个Map体系的集合类 
  • properties中有跟IO相关的方法
  • 只存字符串

2、 Properties和IO流结合方法:

方法名说明

void load​(InputStream inStream)

从输入字节流读取属性列表(键和元素对)

void load​(Reader reader)

从输入字符流读取属性列表(键和元素对)

void store​(OutputStream out, String comments)

将此属性列表(键和元素对)写入此 Properties表中,以适合于使用 load(InputStream)方法的格式写入输出字节流

void store​(Writer writer, String comments)

将此属性列表(键和元素对)写入此 Properties表中,以适合使用 load(Reader)方法的格式写入输出字符流

 例子:读取本机的配置文件

public void findSystemProperties(){
        //获取系统配置信息
        Properties properties = System.getProperties();
//        properties.list(System.out);
        try {
            properties.store(new FileWriter("new.properties"),null);
        } catch (IOException e) {
            e.printStackTrace();
        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值