Java基础-学习笔记17

17 IO流

1. IO流

  • 文件

文件在程序中是以流的形式来操作的。

:数据在数据源(文件)和程序(内存)之间经历的路径
输入流:数据从数据源(文件)到程序(内存)的路径
输出流:数据从程序(内存)到数据源(文件)的路径

  • 常用的文件操作

  • 获取文件的相关信息

  • IO流原理及流的分类

I/O (Input/Output) 技术,用于处理数据传输。如读/写文件,网络通讯等。

* 按操作数据单位:
    * 字节流(8 bit)(方便二进制文件操作)(以字节为单位读取)
    * 字符流(方便文本文件操作)(按字符为单位)
* 按数据流的流向:
  * 输入流
  * 输出流
* 按流的角色:
  * 节点流
  * 处理流/包装流

  • 对象流

ObjectOutputStream 提供序列化功能(序列化:保存数据的值和数据类型)
ObjectInputStream 提供反序列化功能(反序列化:恢复数据的值和数据类型)

需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该类必须实现两个接口之一:

Serializable // 这是一个标记接口,没有方法
Externalizable // 该接口有方法需要实现,因此一般都实现 Serializable 接口
String filePath = "C:\\CloudMusic\\try.dat"; // 这里后缀不管定义什么,最后都会按Java自己的后缀dat保存

ObjectOutputStream ois = new ObjectOutputStream(new FileOutputStream(filePath));
ois.writeInt(100);
ois.writeBoolean(true);
ois.writeUTF("韩顺平");
ois.writeObject(new User(10,27,"ZhangSan"));
ois.close();
System.out.println("ok=========");

ObjectInputStream ois2 = new ObjectInputStream(new FileInputStream(filePath));
System.out.println(ois2.readInt()); // 100
System.out.println(ois2.readBoolean()); // true
System.out.println(ois2.readUTF()); // 韩顺平 
User us1 = (User)ois2.readObject(); // 注:User对象要实现Serializable接口。且对本类来说,拥有可引用的权限,才能正确读取
System.out.println(us1); // User{id=10, age=27, name='ZhangSan'}
System.out.println(us1.getName()); // ZhangSan
ois2.close();

使用细节:

1) 读写顺序要一致
2)要求序列化或反序列化的对象,要实现 Serializable
3)序列化的类中建议添加 SerialVersionUID,为了提高版本的兼容性
4)序列化对象时,默认将里面所有属性都进行序列化,但除了 static 或 transient 修饰的成员
5)序列化对象时,要求里面属性的类型也需要实现序列化接口
6)序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化

  • 标准输入输出流

System.in
      编译类型:InputStream
      运行类型:BufferedInputStream

System.out
      编译类型:PrintStream
      运行类型:PrintStream

  • 转换流

解决文件乱码问题

InputStreamReader:Reader 的子类,可以将 InputStream(字节流) 包装/转换成 Reader(字符流)

OutputStreamWriter:Writer 的子类,实现将 OutputStream(字节流) 包装/转换成 Writer(字符流)

当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换为字符流

字节流文件可以在使用时指定编码格式(比如 utf-8, gbk, gb2312, ISO8859-1 等),再通过转换流转成字符流

  • 打印流

打印流只有输出流,没有输入流

在默认情况下,PrintStream 输出数据的位置是 标准输出,即显示器
可以自己修改打印流输出的位置/设备

System.setOut(new PrintStream("C:\\CloudMusic\\test.txt"));// 修改输出到文件
System.out.println("hello, 韩顺平教育~");

2. Properties 类

  • 基本介绍
    Properties 类是 HashTable 的一个子类,专门用于读写配置文件的集合类,配置文件的格式:
    键=值
    键=值
    (注意:键值对不需要有空格,值不需要用引号引起来,默认类型是 String

  • 常见方法

posted @ 2024-09-09 16:22  JuneFall  阅读(1)  评论(0编辑  收藏  举报