🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿
- 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻
对象序列化:对象I/O流与NIO 和NIO.2:new I/O
对象序列化与对象流
- 将程序中的对象输出到外部设备(如文件、网络)中,称为对象序列化(serialization)。反之,从外部设备将对象读入程序中称为对象反序列化(deserialization)。
- 一个类的对象要实现序列化,必须实现
java.io.Serializable
接口,该接口的定义如下。
public interface Serializable{}
ObjectInputStream
是对象输入流,继承了InputStream类,实现了ObjectInput接口。ObjectOutputStream
是对象输出流,继承了OutputStream类,实现了ObjectOutput接口。
用ObjectOutputStream写出对象
- 构造方法为:
ObjectOutputStream(OutputStream out)
- writeObject()方法格式为:
final void writeObject(Object obj) throws IOException
- 接口还定义多个方法用来输出基本数据类型,如
public void writeInt(int v)
public void writeFloat(float v)
public void writeDouble(double v)
- 下面代码将一些数据和对象写到对象输出流中。
FileOutputStream fos = new FileOutputStream("data.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(2010); // 写出一个整数
oos.writeObject(“你好”); // 写出一个字符串
oos.writeObject(LocalDate.now()); // 写出一个日期对象
用ObjectInputStream读出对象
- 构造方法为:
public ObjectInputStream(InputStream in)
- readObject()方法格式为:
public final Object readObject() throws IOException
- 该接口中定义多个方法用来读入基本数据类型,如
public int readInt()
public float readFloat()
public double readDouble()
- 下面代码建立一个对象输入流对象。
FileInputStream fis = new FileInputStream("data.ser");
ObjectInputStream oip = new ObjectInputStream(fis);
int i = ois.readInt();
String today = (String)ois.readObject();
LocalDate date = (LocalDate)ois.readObject();
- 对象序列化需要注意的事项:
1️⃣序列化只能保存对象的非static
成员,不能保存任何成员方法和static成员变量,而且序列化保存的只是变量的值。
2️⃣用transient
关键字修饰的变量为临时变量,也不能被序列化。
3️⃣如果成员变量为引用类型,引用的对象也被序列化。
序列化数组
- 数组是对象,也可以被序列化。如果数组中的所有元素都是可序列化的,这个数组就是可序列化的。
- 一个完整的数组可以用·writeObject()·方法存入文件,之后用·readObject()·方法读取到程序中。
NIO和NIO.2
- 为了增强Java I/O功能,在JDK 1.4中增加了一些新的API,称为New I/O(NIO), NIO API是java.nio包及其子包中定义的。
- 在JDK 7中又新引进了一些包,称作NIO.2,用来对现有技术进行补充。NIO.2的接口和类通过java.nio.file包及其子包提供。
文件系统和路径
- 一个文件系统可以包含三类对象:
① 文件
② 目录(也称文件夹)
③ 符号链接(symbolic
- 绝对和相对路径:
① 绝对路径(绝对路径是以根元素为起点的路径,包含定位文件的所有信息。D:\study\user\report.txt)
② 相对路径相对路径是不包含根元素的路径,例如,study\com\Hello.java
FileSystem类
- FileSystem表示一个文件系统,它是一个抽象类,可以调用FileSystems类的getDefault()静态方法来获取当前的文件系统。
FileSystem fileSystem = FileSystems.getDefault();
- FileSystem类常用方法:
abstract Path getPath(String first, String …more)
abstract String getSeparator()
abstract Iterable<Path>getRootDirectores()
abstract boolean isOpen()
abstract boolean isReadOnly()
Path接口对象
- 在Java 7中应使用NIO.2的java.nio.file.Path接口对象代替java.io.File。
- 可以使用Paths(注意是复数)类的get()方法创建Path对象:
Path p1 = Paths.get("D:\\study\\com\\Hello.java");
Path p2 = Paths.get(args[0]);
Path p3 = Paths.get(
URI.create("file:///users/joe/FileTest.java"));
- 检索路径信息:
- Path对象可以看做是一个名称序列,每一级目录可以通过索引指定。目录结构的最顶层索引为0,目录结构的最底层元素索引是n-1,n是总层数。例如,getName(0)方法将返回最顶层目录名称。
Path path = Paths.get("D:\\study\\user\\report.txt");
System.out.println("getFileName:" + path.getFileName());
博主用心写,读者点关注,互动传真情,只是不迷路。