其他流总述

1.转换流

InputStreamReader: 把InputStream转换为Reader,可以指定编码表
OutputStreamWriter: 把OutputStream转换为Writer,可以指定编码表

//转换流[用于指定编码表读入或写出]
public class Demo1 {
    public static void main(String[] args) throws IOException {
        //jdk11以前使用转化流[按照指定的编码表,将字节流转化为字符流]
        method1();
        //jdk11之后提供了字符流指定编码表
        //Charset.forName()封装指定编码表
        //method2();
    }

    private static void method1() throws IOException {
        //1.创建转化输入输出流对象
        InputStreamReader isr = new InputStreamReader(new FileInputStream("day12_myIoOtherStream\\a.txt"), "gbk");
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("day12_myIoOtherStream\\c.txt"), "utf-8");
        char []chars =new char[1024];
        int len = isr.read(chars);
        //2.边读边写
        while (len!=-1){
            osw.write(chars,0,len);
            len = isr.read(chars);
        }
        //3.释放资源
        isr.close();
        osw.close();
    }

    private static void method2() throws IOException {
        //1.创建字符输入输出流对象
        FileReader fr = new FileReader("day12_myIoOtherStream\\a.txt", Charset.forName("GBK"));
        FileWriter fw = new FileWriter("day12_myIoOtherStream\\b.txt", Charset.forName("utf-8"));
        char []chars =new char[1024];
        int len = fr.read(chars);
        //2.边读边写
        while (len!=-1){
            fw.write(chars,0,len);
            len = fr.read(chars);
        }
        //3.释放资源
        fr.close();
        fw.close();
    }
}
打印结果:
------------------------------------------------------------------------------------------------
a.txt:我爱中国
b.txt:我爱中国
c.txt:�Ұ��й�
2.对象流【隐藏对象不能被直接读取】

ObjectInputStream: 读取对象的
ObjectOutputStream: 写入对象

//对象操作流(序列化流)----------做了解
//objectOutputStream 序列化流 ;写对象
//objectInputStream 反序列化流 ;读对象
public class Demo1 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        User user = new User("zhangsan", "123456");
        //把对象写到文件中去【序列化】
//        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("day12_myIoOtherStream\\d.txt"));
//        oos.writeObject(user);
//        oos.close();
        //从文件中读取对象【反序列化】
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("day12_myIoOtherStream\\d.txt"));
        Object o = ois.readObject();
        System.out.println(o);
    }
}

//用户类
//Serializable 标记接口,表示可被序列化
public class User implements Serializable {
    private String name;
    private String password;

    //防止序列化前后属性变更,可固定序列号解决报错
    //代码可在String源码中复制
    private static final long serialVersionUID = 67710L;

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }
    //标准的Javabean类(get、set方法)
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

打印结果:
----------------------------------------------------------------------------
d.txt:�� sr com.itheima.objectStream.User     ~ L namet Ljava/lang/String;L passwordq ~ xpt zhangsant 123456
控制台:User{name='zhangsan', password='123456'}
3.标准的输入输出流【面试】

System.in: 标准的输入流,读取键盘录入的数据
System.out: 标准的输出流,往控制台输出数据

//标准输入输出流【扩展内容,打印和键盘录入底层原理】
public class Demo1 {
    public static void main(String[] args) throws IOException {
        //System.in:标准的输入流,读取键盘录入的数据[InputStream]
        //Scanner是对其的包装,增加了对数据的操作
        //method1();
        
        //System.out:标准的输出流,往控制台输出数据
        //print底层用的输出流就是PrintStream 父类为[FilterOutputStream]
        method2();
    }

    private static void method2() throws IOException {
        PrintStream out = System.out;
        //把字节流转化为字节流[转化流]
        OutputStreamWriter osw = new OutputStreamWriter(out);
        //把字符流包装成缓冲流
        BufferedWriter bw = new BufferedWriter(osw);
        //向控制台输出数据
        bw.write("asd");
        //释放资源
        bw.close();
    }

    private static void method1() throws IOException {
        Scanner sc = new Scanner(System.in);
        //自定义[键盘录入]
        InputStream in = System.in;
        //把字节流转化为字节流[转化流]
        InputStreamReader isr = new InputStreamReader(in);
        //把字符流包装成缓冲流
        BufferedReader br = new BufferedReader(isr);
        //读取键盘录入的数据
        String s = br.readLine();
        System.out.println(s);
        //关闭流
        br.close();
    }
}

打印结果:
----------------------------------------------------------------------------
method1:12
        12
method2: asd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陪雨岁岁年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值