文件
- 保存数据的地方
- 文件流
- 输入流就是把磁盘(文件,网络)的数据读入Java程序中
- 输出流就是把Java的内存上的数据读到磁盘(文件,网络)上
- 输入流用于从目标(文件,磁盘,网络)读取数据到Java程序,输出流是把Java程序写的数据向目标(文件,磁盘,网络)写入。
文件创建
完整路径
|
|
父目录子文件
|
|
文件操作
|
|
IO流分类
字节流
- 输入流(InputStream)
- 输出流(OutputStream)
字符流(不要读取二进制文件(声音,视频…..)会损坏文件)
- 输入流(reader)
- 输出流(writer)
节点流(底层)
- 从一个数据源(存放数据的地方)的地方读写数据流也就是,也就是说读写数据的过程
- 它是一个大的方向
处理流/包装流
- 处理流>节点流>输入输出流(字符、数组、字节)
- 建立在节点流之上,提供更为强大的读写能力,也更加灵活,其中用了修饰器模式
- 各个处理流有一个父类的引用,也就是说它就可以包装这个父类的引用
- 构造器需要一个节点流就是处理流
序列化(写)和反序列化(读)
主要用到的流:ObjectOutputStream和ObjectInputStream
序列化:保存数据时是保存数据的值和类型
反序列化:恢复数据时恢复数据的值和数据类型
让某个对象可以序列化就必须要实现两个接口的其中一个
- Serializable:标记接口没有任何方法,推荐使用
- Externalizable
反序列化时注意顺序一定要跟序列化顺序一样
transient:防止变量被序列化只能用在变量上
- 序列化时默认所有属性都能被序列化除了static和transient
1 2 3
//这个代表版本号,也就是说假如这个类加了什么(比如属性)序列化时不会认为这是新的类,只会认为就是这个类升级了 //网络传输的东西都需要序列化,因此需要一个唯一的标记号,序列化的serialVersionUID就是做这样的事 private static final long serialVersionUID = 1L; //序列化版本可以自定义
序列化对象时,里面的属性(自定义类也需要) 也需要实现Serializable接口
序列化可继承,父类实现了Serializable接口,子类也就相当于实现了
标准输入输出流
- System.in标准输入、System.out标准输出
- 相关的流
- InputStream = 键盘
- PrintStream = 显示器
转换流
- 目的:把字节流转换(包装)字符流,解决不同的编码问题
- 相关的流:InputStreamReader和OutputStreamWriter他俩有一个共同的特点就是可以设置字符集
- InputStreamReader是Reader子类
- OutputStreamWriter是Writer的子类
打印流
- 相关的流:PrintStream和PrintWriter
- PrintStream
- setOut()切换输出位置(可以是文件)
- PrintStream
- 打印流只有输出(写) 默认是输出到控制台(显示器)
Properties
Properties
用于读写配置文件**.properties**文件配置文件的格式:键=值,不能有空格,不用双引号默认类型是String
IO小知识
UTF-8编码下中英文大小
|
|
内存的进制
|
|