javaIO流总结

本文详细介绍了Java.IO流的分类,包括字节流、字符流、节点流与处理流的概念,并重点讲解了对象流的序列化与反序列化。此外,还阐述了标准输入输出流System.in和System.out的使用,以及转换流在处理乱码问题中的作用。最后提到了Properties类在读写配置文件时的应用。
摘要由CSDN通过智能技术生成

IO 流

流分为字节流和字符流。字符流主要针对文本的输入和输出,字节流可以处理文本、图像、音频等字节数据

出自韩顺平老师
该图出自韩曙平老师资料

节点流和处理流

  • 节点流是实现对特定数据源的输入和输出。比如FileInputStream、FileOutputStream、FileReader、FileWriter专门实现对文件的输入输出操作。
  • 处理流又称为包装流。比如BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter、ObjectInputStream、ObjectOutputStream。在创建对象的时候可以通过传进一个节点流来进行实例化。所以想拥有什么功能的节点流就传什么功能的节点流对象给包装流,从而达到包装流可以拥有多种功能的效果。这种模式又叫做修饰模式。包装流的本质还是节点流,但是包装流可以对节点流的方法进行完善,从而功能更加完善和高效。

对象处理流

对象处理流包括ObjectInputStream、ObjectOutputStream,对象处理流可以实现序列化和反序列化。序列化是指,把数据类型和数值都存入到文件中,反序列化是把存储了数据类型和数值的文件读取到程序中,在程序中还保持着其数据类型。比如把dog对象存储到文件中(序列化),从文件读取dog对象(反序列化)。
实现序列化和反序列化的对象必须实现Serializable接口。基本类型int、boolean、double类型在进行序列化和反序列化的时候会进行自动装箱(包装类实现了Serializable接口)

标准输入输出流

标准输入输出流包括System.in 和System.out
System.in的编译类型是InputStream,运行类型是BufferedInputStream,默认从键盘输入。
Systen.out的编译类型和运行类型都是printStream(OutputStream的子类),默认输出到屏幕。也可以调用System的setOut(PrintStream out) 从而实现其他方面输出。比如System.setOut(new PrintStream(“d:\8.txt”)); 这样System.out 输出对象则为d:\8.txt

转换流

转换流分为InputStreamReader、OutputStreamWriter,可以解决读取或输出为乱码的情况下。默认情况下,IDEA 设置编码格式为utf-8。在操作utf-8的文件时候不会出现乱码。在特殊情况下,我们读取的文件可能为其他编码,比如gbk、ANSI等等。所以这个时候需要用到转换流。如下图InputStreamReader可以读取gbk文件,OutputStreamWriter可以输出到gbk文件

InputStreamReader isr = new InputStreamReader(fileInputStream, "gbk");
OutputStreamWriter osw = new OutputStreamWriter(fileOutputStream, "gbk");

打印流(只有输出流)

打印流分为PrintStream,PrintWriter。

-------------------------------------------------------------------

由于Properties也是可以对文件进行输入输出的操作,所以归纳在这:
Properties是Hashtable的一个子类,而HashTable实现了Map接口。所以Properties保存的是键值对。

        Properties properties = new Properties();
        //加载配置文件
        properties.load(new FileInputStream("src\\mysql.properties"));

        //取出配置文件信息
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        System.out.println(user);
        System.out.println(password);

        //列出所有配置信息
        PrintWriter printWriter = new PrintWriter(System.out);
        properties.list(printWriter);
        printWriter.close();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值