zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java IO--对象序列化Serializable、ObjectOutputStream、ObjectInputStream、transient

JAVA对象IO -- 序列化 serializable 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 ;
操作代码:


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