Java IO--对象序列化Serializable、ObjectOutputStream、ObjectInputStream、transient
2023-09-14 08:57:16 时间
1、对象序列化是什么?
一个对象产生之后实际上是在内存中为其开辟了一个存储空间,方便存储信息。
public class Person implements Serializable{ private String name ; // 声明name属性,但是此属性不被序列化 private int age ; // 声明age属性 public Person(String name,int age){ // 通过构造设置内容 this.name = name ; this.age = age ; public String toString(){ // 覆写toString()方法 return "姓名:" + this.name + ";年龄:" + this.age ; 以后此类的对象,就可以被序列化了。变为二进制byte流。 对象的序列化和反序列化:
serialVersionUID
public class Person implements Serializable{ private static final long serialVersionUID = 1L;/*验证版本的一致性*/ private String name ; // 声明name属性 private int age ; // 声明age属性 public Person(String name,int age){ // 通过构造设置内容 this.name = name ; this.age = age ; public String toString(){ // 覆写toString()方法 return "姓名:" + this.name + ";年龄:" + this.age ; 如果使用开发工具开发,没有编写此代码,则会出现一些安全警告信息。
2、对象的序列化:ObjectOutputStream
public static void main(String args[]) throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定义保存路径 ObjectOutputStream oos = null ; // 声明对象输出流 OutputStream out = new FileOutputStream(f) ; // 文件输出流 oos = new ObjectOutputStream(out) ; oos.writeObject(new Person("张三",30)) ; // 保存对象 oos.close() ; // 关闭 }; 所有的对象拥有各自的属性值,但是所有的方法都是公共的,所以序列化对象的时候实际上序列化的就是属性。
public static void main(String args[]) throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定义保存路径 ObjectInputStream ois = null ; // 声明对象输入流 InputStream input = new FileInputStream(f) ; // 文件输入流 ois = new ObjectInputStream(input) ; // 实例化对象输入流 Object obj = ois.readObject() ; // 读取对象 ois.close() ; // 关闭 System.out.println(obj) ; }; 4、transient关键字
public class Person implements Serializable{ private static final long serialVersionUID = 1L; private transient String name ; // 声明name属性,但是此属性不被序列化 private int age ; // 声明age属性 public Person(String name,int age){ // 通过构造设置内容 this.name = name ; this.age = age ; public String toString(){ // 覆写toString()方法 return "姓名:" + this.name + ";年龄:" + this.age ;
5、序列化一组对象
public static void main(String args[]) throws Exception{ Person per[] = {new Person("张三",30),new Person("李四",31), new Person("王五",32)} ; ser(per) ; Object o[] = (Object[])dser() ; for(int i=0;i o.length;i++){ Person p = (Person)o[i] ; System.out.println(p) ; public static void ser(Object obj[]) throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定义保存路径 ObjectOutputStream oos = null ; // 声明对象输出流 OutputStream out = new FileOutputStream(f) ; // 文件输出流 oos = new ObjectOutputStream(out) ; oos.writeObject(obj) ; // 保存对象 oos.close() ; // 关闭 public static Object[] dser() throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定义保存路径 ObjectInputStream ois = null ; // 声明对象输入流 InputStream input = new FileInputStream(f) ; // 文件输入流 ois = new ObjectInputStream(input) ; // 实例化对象输入流 Object obj[] = (Object[])ois.readObject() ; // 读取对象 ois.close() ; // 关闭 return obj ; };
java面试题(十一)IO流篇 3.1 介绍一下Java中的IO流 IO(Input Output)用于实现对数据的输入与输出操作,Java把不同的输入/输出源(键盘、文件、网络等)抽象表述为流(Stream)。流是从起源到接收的有序数据,有了它程序就可以采用同一方式访问不同的输入/输出源。 ● 按照数据流向,可以将流分为输入流和输出流,其中输入流只能读取数据、不能写入数据,而输出流只能写入数据、不能读取数据。 ● 按照数据类型,可以将流分为字节流和字符流,其中字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符。 ● 按照处理功能,可以将流分为节点流和处理流,其中节点流可以直接从/向一个特定的I
public class Person implements Serializable{ private String name ; // 声明name属性,但是此属性不被序列化 private int age ; // 声明age属性 public Person(String name,int age){ // 通过构造设置内容 this.name = name ; this.age = age ; public String toString(){ // 覆写toString()方法 return "姓名:" + this.name + ";年龄:" + this.age ; 以后此类的对象,就可以被序列化了。变为二进制byte流。 对象的序列化和反序列化:
serialVersionUID
public class Person implements Serializable{ private static final long serialVersionUID = 1L;/*验证版本的一致性*/ private String name ; // 声明name属性 private int age ; // 声明age属性 public Person(String name,int age){ // 通过构造设置内容 this.name = name ; this.age = age ; public String toString(){ // 覆写toString()方法 return "姓名:" + this.name + ";年龄:" + this.age ; 如果使用开发工具开发,没有编写此代码,则会出现一些安全警告信息。
2、对象的序列化:ObjectOutputStream
public static void main(String args[]) throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定义保存路径 ObjectOutputStream oos = null ; // 声明对象输出流 OutputStream out = new FileOutputStream(f) ; // 文件输出流 oos = new ObjectOutputStream(out) ; oos.writeObject(new Person("张三",30)) ; // 保存对象 oos.close() ; // 关闭 }; 所有的对象拥有各自的属性值,但是所有的方法都是公共的,所以序列化对象的时候实际上序列化的就是属性。
public static void main(String args[]) throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定义保存路径 ObjectInputStream ois = null ; // 声明对象输入流 InputStream input = new FileInputStream(f) ; // 文件输入流 ois = new ObjectInputStream(input) ; // 实例化对象输入流 Object obj = ois.readObject() ; // 读取对象 ois.close() ; // 关闭 System.out.println(obj) ; }; 4、transient关键字
public class Person implements Serializable{ private static final long serialVersionUID = 1L; private transient String name ; // 声明name属性,但是此属性不被序列化 private int age ; // 声明age属性 public Person(String name,int age){ // 通过构造设置内容 this.name = name ; this.age = age ; public String toString(){ // 覆写toString()方法 return "姓名:" + this.name + ";年龄:" + this.age ;
操作代码:
import java.io.File ; import java.io.IOException ; import java.io.FileOutputStream ; import java.io.OutputStream ; import java.io.ObjectOutputStream ; import java.io.FileInputStream ; import java.io.InputStream ; import java.io.ObjectInputStream ; public class SerDemo04{ public static void main(String args[]) throws Exception{ ser() ; dser() ; public static void ser() throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定义保存路径 ObjectOutputStream oos = null ; // 声明对象输出流 OutputStream out = new FileOutputStream(f) ; // 文件输出流 oos = new ObjectOutputStream(out) ; oos.writeObject(new Person("张三",30)) ; // 保存对象 oos.close() ; // 关闭 public static void dser() throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定义保存路径 ObjectInputStream ois = null ; // 声明对象输入流 InputStream input = new FileInputStream(f) ; // 文件输入流 ois = new ObjectInputStream(input) ; // 实例化对象输入流 Object obj = ois.readObject() ; // 读取对象 ois.close() ; // 关闭 System.out.println(obj) ; };
5、序列化一组对象
public static void main(String args[]) throws Exception{ Person per[] = {new Person("张三",30),new Person("李四",31), new Person("王五",32)} ; ser(per) ; Object o[] = (Object[])dser() ; for(int i=0;i o.length;i++){ Person p = (Person)o[i] ; System.out.println(p) ; public static void ser(Object obj[]) throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定义保存路径 ObjectOutputStream oos = null ; // 声明对象输出流 OutputStream out = new FileOutputStream(f) ; // 文件输出流 oos = new ObjectOutputStream(out) ; oos.writeObject(obj) ; // 保存对象 oos.close() ; // 关闭 public static Object[] dser() throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定义保存路径 ObjectInputStream ois = null ; // 声明对象输入流 InputStream input = new FileInputStream(f) ; // 文件输入流 ois = new ObjectInputStream(input) ; // 实例化对象输入流 Object obj[] = (Object[])ois.readObject() ; // 读取对象 ois.close() ; // 关闭 return obj ; };
java面试题(十一)IO流篇 3.1 介绍一下Java中的IO流 IO(Input Output)用于实现对数据的输入与输出操作,Java把不同的输入/输出源(键盘、文件、网络等)抽象表述为流(Stream)。流是从起源到接收的有序数据,有了它程序就可以采用同一方式访问不同的输入/输出源。 ● 按照数据流向,可以将流分为输入流和输出流,其中输入流只能读取数据、不能写入数据,而输出流只能写入数据、不能读取数据。 ● 按照数据类型,可以将流分为字节流和字符流,其中字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符。 ● 按照处理功能,可以将流分为节点流和处理流,其中节点流可以直接从/向一个特定的I
相关文章
- java工具类-Java对象转换成Map
- import java.io 是什么意思_Java IO 详解
- java环境_Java 开发环境配置
- 在线学习Java的几个网站,别再盲目学习java了![通俗易懂]
- Java怎么安装 详细教程来了 附带安装包
- md5 java 实现_MD5加密的Java实现
- Java把string转json格式_java实体类转json字符串
- java字符串转换为json对象6_Json对象与Json字符串的转化、JSON字符串与Java对象的转换…
- Java最新简答题
- Java 对象和类
- Spring Batch 5.0 发布,使用 JDK 17 作为基线版本并支持原生 Java
- 二叉搜索树算法详解与Java实现编程语言
- java压缩与解压(Java.util.zip)详解编程语言
- java调用http接口并返回json对象详解编程语言
- java foreach原理详解编程语言
- Java对象类型转换和强制对象类型转换
- 策略处理Java对象过期策略的Redis实践(redisjava过期)
- 控制基于Redis的Java过期控制实现(redisjava过期)
- 构建Java应用程序中Redis集群的方法(java连redis集群)
- Java程序调用Linux系统命令实现更多功能(java调用linux命令)
- 数据库Java编程修改Oracle数据库的实践(java修改oracle)
- java使用des加密解密示例分享
- java实现十六进制字符unicode与中英文转换示例