Java语言程序设计——篇十三(3)


🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

  • 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
    您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻

对象序列化:对象I/O流与NIO 和NIO.2:new I/O

对象序列化与对象流

  • 将程序中的对象输出到外部设备(如文件、网络)中,称为对象序列化(serialization) 。反之,从外部设备将对象读入程序中称为对象反序列化(deserialization)。
  • 一个类的对象要实现序列化,必须实现java.io.Serializable接口,该接口的定义如下。
java 复制代码
public interface Serializable{}
  • ObjectInputStream是对象输入流,继承了InputStream类,实现了ObjectInput接口。
  • ObjectOutputStream是对象输出流,继承了OutputStream类,实现了ObjectOutput接口。

用ObjectOutputStream写出对象

  • 构造方法为:
java 复制代码
 ObjectOutputStream(OutputStream out)
  • writeObject()方法格式为:
java 复制代码
final void writeObject(Object obj)   throws IOException
  • 接口还定义多个方法用来输出基本数据类型,如
java 复制代码
    public void writeInt(int v)
    public void writeFloat(float v)
    public void writeDouble(double v)
  • 下面代码将一些数据和对象写到对象输出流中。
java 复制代码
   FileOutputStream fos = new FileOutputStream("data.ser");
   ObjectOutputStream oos =  new ObjectOutputStream(fos);
   oos.writeInt(2010);        // 写出一个整数
   oos.writeObject("你好");     // 写出一个字符串
   oos.writeObject(LocalDate.now());     // 写出一个日期对象

用ObjectInputStream读出对象

  • 构造方法为:
java 复制代码
public ObjectInputStream(InputStream in)
  • readObject()方法格式为:
java 复制代码
    public final Object readObject()   throws IOException
  • 该接口中定义多个方法用来读入基本数据类型,如
java 复制代码
    public int  readInt()
    public float readFloat()
    public double readDouble()
  • 下面代码建立一个对象输入流对象。
java 复制代码
   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()静态方法来获取当前的文件系统。
java 复制代码
FileSystem fileSystem = FileSystems.getDefault();
  • FileSystem类常用方法:
java 复制代码
   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对象:
java 复制代码
   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)方法将返回最顶层目录名称。
java 复制代码
    Path path = Paths.get("D:\\study\\user\\report.txt");
    System.out.println("getFileName:" + path.getFileName());

博主用心写,读者点关注,互动传真情,只是不迷路。

相关推荐
万物得其道者成15 分钟前
React Zustand状态管理库的使用
开发语言·javascript·ecmascript
奈斯。zs19 分钟前
yjs08——矩阵、数组的运算
人工智能·python·线性代数·矩阵·numpy
Melody205019 分钟前
tensorflow-dataset 内网下载 指定目录
人工智能·python·tensorflow
蜗牛沐雨20 分钟前
用 ReactPHP 实现图片上传加速:让并发上传实现真正的高效
php·reactphp
学步_技术20 分钟前
Python编码系列—Python抽象工厂模式:构建复杂对象家族的蓝图
开发语言·python·抽象工厂模式
【D'accumulation】34 分钟前
典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
java·设计模式·mvc
wn53144 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
试行1 小时前
Android实现自定义下拉列表绑定数据
android·java
Narutolxy1 小时前
Python 单元测试:深入理解与实战应用20240919
python·单元测试·log4j
茜茜西西CeCe1 小时前
移动技术开发:简单计算器界面
java·gitee·安卓·android-studio·移动技术开发·原生安卓开发