本帖最后由 小石姐姐 于 2018-8-9 10:47 编辑
序列化流(对象流)
1. 序列化流分为两种 : 序列化和反序列化
1.1 什么是序列化?
把对象以流的方式写入到文件中保存,叫做对象的序列化,也可以叫做写对象.
对象被写入到文件中保存,因为对象中包含的不仅仅是字符,也可以包含视频.音频.文件.等等,所以文件中存储的形式统统为字节形式.
ObjectOutputStream : 对象的序列化流
1.2 什么是反序列化?
磁盘文件中的字节序列, 以流的方式读取到内存中变成对象字节转对象.
把文件中保存的对象,以流的方式读取出来,叫做对象的反序列化,也叫做读对象.
因为文件中保存的对象都是以字节形式保存的,所以用字节流读取.
ObjectInputStream :对象的反序列化流
一. ObjectOutputStream类(对象字节输出流)
定义.使用格式.包含方法.方法使用场景
OutputStream的 :
概念 : ObjectOutputStream类(对象字节输出流): : 将Java对象的原始数据类型写出到文件,实现对象的持久存储
构造方法(包含一个) :
创建一个指定OutputStream的ObjectOutputStream
序列化的具体操作步骤 :
1. 一个对象如果想要被序列化, 必须满足两个条件 :
1.1 : 该类必须实现 java.io.Serializable 接口, Serializable 是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出 NotSerializableException异常 。注意事项 : 没有序列化异常
1.2 : 该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用 transient 关键字修饰。
编程单词汇总 :
[AppleScript] 纯文本查看 复制代码 (1) : close 关闭
(2) : address 地址
(3) : Stream : 流
(4) : write : 写
(5) : final : 最终的
(6) : read : 阅读
(7) : Stack : 栈
(8) : Object : 对象
(9) : InputStream : 输入流
(10) : readobject : 读取对象
(11) : getname : 获得名称
(12) : getAge : 获得年龄
InputStream的子类 :
ObjectInputStream类: 对象字节输入流 :
ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。
反序列化操作 :
如果能找到一个对象的class文件,我们可以进行反序列化操作,调用 ObjectInputStream 读取对象的方法
public final Object readObject () : 读取一个对象。
反序列化的前提 :
1. 类必须实现Serializable
2.必须存在类对应的class文件
【File类、递归】
一 File类
1.1概述
类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作.
注 : File : 把路径名用String字符串的形式表现了出来.
1.2 构造方法
[AppleScript] 纯文本查看 复制代码 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
问题汇总:
1. 什么是绝对路径?
回答: 从盘符开始,路径一直到所选择的文件名称.
2. 什么是相对路径?
回答: 所选择的文件名称或者文件名相对于上一个文件夹名. 这个所选择的文件名称就是相对路径.
3. 什么是父子路径?
回答: 在一个完整路径中,从哪里截取,在完整路径中截取的前半段就是父路径,截取的后半段就是子路径.
注意事项:
1. 文件返回的大小,用字节数表示(int 数字). 文件有具体的大小,文件夹没有,所以返回的结果是0(不能获取目录的大小)
2. 一个File对象代表硬盘中实际存在的一个文件或者目录.
3. 无论该路径下是否存在文件或者目录,都不影响File对象的创建
1.3 常用方法
判断功能的方法 :
[Java] 纯文本查看 复制代码 public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件(不要与文件夹混淆,只是文件)。
创建删除功能的方法:[AppleScript] 纯文本查看 复制代码 public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete() :删除由此File表示的文件或目录。
public boolean mkdir() :创建由此File表示的目录???
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录????.
1.4 目录的遍历
[AppleScript] 纯文本查看 复制代码 public String[ ] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
public File[ ] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
区别在于: list只打印当前的文件或文件夹名称
listFiles打印完整的路径名称,从盘符开始.
二 递归
2.1 概述:
指在当前方法内调用自己的这种现象.
递归的使用前提:
调用方法时, 方法的主体不变, 但每次传递的参数值不同, 可以使用递归
2.2 递归累和:
解题思路:
根据递归的思想,找出问题的规律,从而根据规律总结出解决问题的公式,利用公式把参数套进去.
需求: 求5~1的和 5+4+3+2+1
求5~1的和 = 5 + 4~1的和
4~1的和 = 4 + 3~1的和
3~1的和 = 3 + 2~1的和
2~1的和 = 2 + 1~1的和
1~1的和 = 1
n不是1时公式:
求n~1的和 = n + (n-1)~1的和
n是1时的公式:
求1~1的和 = 1;
求5~1的和 = 5 + 10
4~1的和 = 4 + 6
3~1的和 = 3 + 3
2~1的和 = 2 + 1
1~1的和 = 1
把要解决的问题定义为方法:
求5~1的和
求4~1的和
求3~1的和
求2~1的和
求1~1的和
求n~1的和 -> 要定义的方法
返回值类型: int 和
参数列表: int n
[AppleScript] 纯文本查看 复制代码 public static int sum(int n) {
if (n == 1) {
// 公式: = 1
return 1;
} else {
// 公式: n + (n-1)~1的和
return n + sum(n-1);
}
}
问题汇总:
1. 什么是绝对路径?
回答: 从盘符开始,路径一直到所选择的文件名称.
2. 什么是相对路径?
回答: 所选择的文件名称或者文件名相对于上一个文件夹名. 这个所选择的文件名称就是相对路径.
3. 什么是子路径?
4. 什么是父路径?
回答: 在一个完整路径中,从哪里截取,在完整路径中截取的前半段就是父路径,截取的后半段就是子路径.
目录的遍历
[AppleScript] 纯文本查看 复制代码 public String[] list() : 返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles() : 返回一个File数组,表示该File目录中的所有的子文件或目录。
递归
递归: 指在当前方法内调用自己的这种对象.
递归累和
英文单词 :
listFiles : 列表文件
IO流
一.什么是IO流?
(1) : 输入(In)
(2) : 输出(Out)流
(3) : 流: 数据流
作用 :
输入(In): 把数据从硬盘读取到内存
输出(Out) : 把数据从内存读取到硬盘
(这里的入和出都是相对于内存来说的)
二.IO流的分类
总共分为两类: 字节流 和 字符流
2.1 字节流 : 读写字节: byte, 可以读写所有类型的文件, 包括视频, 图片, 音频, 文本等
字节流分为两个类:
字节输入流 : java.io.InputStream 抽象类
字节输出流 : java.io.OutputStream 抽象类
2.2 字符流 : (读写字符: char, String, 只能读写文本文件)
字符流分为两个类:
字符输入流: java.io.Reader 抽象类
字符输出流: java.io.Writer 抽象类
三.字节流
基本常识:
计算机中的一切皆为字节.
计算机中, 无论文本, 视频, 音频, 图片... 一切都是以"字节byte"形式存储的
也就是以数字形式存储的, 而数字可以用不同进制表示, 计算机能看懂的是二进制数字.
3.1 字节输出流: OutputStream和FileOutputStream
java.io.OutputStream抽象类: 字节输出流 (顶层类) :
OutputStream 内包含五个成员方法,其中五个成员方位分为两类 : 成员方法及写字节的成员方法
成员方法 (包含两个):
(1) : close : 释放资源. 一般在方法代码末尾.
(2) : flush : 刷新缓冲区(对于字节流来说没有任何作用)
写字节的成员方法(包含三个) :
[AppleScript] 纯文本查看 复制代码 (1) : abstract void write(int b): 一次写一个字节 (参数是int是为了代码中写表示byte的整数方便不用强转)
(2) : void write(byte[] b): 一次写一个字节数组
(3) : void write(byte[] b, int off, int len): 一次写一个字节数组的一部分
字节输出流 : 一次写一个字节到文件
Java程序将数据写入文件的原理 :
Java程序 -> JVM虚拟机 -> OS操作系统 -> OS调用写数据的方法 -> 将数据写入文件
使用字节输出流写数据到文件的步骤(一共为三步) :
1. 创建对象: 创建FileOutputStream对象, 构造方法中传递文件路径
2. 写入数据: 使用FileOutputStream对象调用 write(int b) 方法, 将字节写入文件
3. 释放资源: 使用FileOutputStream对象调用 close() 方法, 关闭流对象释放资源文件存储原理和记事本打开文件的原理
(1)]文件存储原理和记事本打开文件的原理
(1)]
重点 :
byte[] getBytes(): 使用平台的默认字符集将此String编码为byte数组. 使用当前编译平台的默认字符集将String类型的数据用byte数据类型表达出来.
字节输出流: 续写操作
在文件已有内容之后, 接着写入内容 (续写).
Windows系统: "\r\n"
MacOS系统: "\r"
带有 "续写" 功能的构造方法, 不会清空文件[AppleScript] 纯文本查看 复制代码 FileOutputStream(String name, boolean append): 通过文件路径创建文件字节输出流, true可以续写
FileOutputStream(File file, boolean append): 通过File对象创建文件字节输出流, true可以续写
|
|