您的位置:首页 > 移动开发 > Objective-C

ObjectOutputStream-ObjectInputStream的使用

2017-09-01 20:04 260 查看
1).序列化

把对象转化为字节序列,这个过程称之为对象序列化

与之相反的称之为反序列化。

2)用ObjectOutputStream类对象的时候,必须要进行序列化(序列化在实体类中实现)

<1>.ObjectOutputStream 对象的序列化,通过java.io.Serializable接口实现序列化,如果不序列化则会报NotSerializableException

<2>.ObjectInputStream 对象的反序列化,对于反序列化过程中,固定版本号,便于反序列化。示例:private static final long serialVersionUID = 1L;

示例:cn.lf.day0901.User和cn.lf.day0901.UserObjectOutputStreamDemo1;

ObjectInputStream和ObjectInputStream类创建的对象被称为对象输入流和对象输出流。

创建文件输出流代码:

FileOutputStream fos = new FileOutputStream(file);

ObjectOutputStream oos = new ObjectOutputStream(fos);

创建文件输入流代码:

FileInputStream fis = new FileInputStream( file);

ObjectInputStream ois = new ObjectInputStream(fis);

实体类User

package cn.lf.day0901;

import java.io.Serializable;

//实体类序列化:实现Serializable接口
public class User implements Serializable{
/**
* 当前版本号
*/
private static final long serialVersionUID = 6207704988510402742L;
private String name; //姓名
private int age; //年龄
private String userName; //用户名
private String userPassword; //用户密码
private double salary; //薪水

public User(String name, int age, String userName, String userPassword, double salary) {
super();
this.name = name;
this.age = age;
this.userName = userName;
this.userPassword = userPassword;
this.salary = salary;
}

public User() {
super();
}

@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", userName=" + userName + ", userPassword=" + userPassword
+ ", salary=" + salary + "]";
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getUserPassword() {
return userPassword;
}

public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}

public double getSalary() {
return salary;
}

public void setSalary(double salary) {
this.salary = salary;
}
}


测试类UserObjectOutputStreamDemo1

package cn.lf.day0901;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.junit.Test;

public class UserObjectOutputStreamDemo1 {
@Test
public void testName() throws IOException, ClassNotFoundException{
File file = new File("./test/obj.txt");  //在当前工程目录下创建文件obj.txt
if (!file.exists()) {
file.createNewFile();  //创建文件
}
User user = new User();
user.setName("胡一刀");
user.setAge(45);
user.setSalary(4500);
user.setUserName("admin");
user.setUserPassword("124356");
//writeToObjectOutputStream(file, user);

User readUser = readToObjectInputStream(file);
System.out.println(readUser);
}

//写文件
//用ObjectOutputStream类对象的时候,必须要进行序列化(序列化在实体类中实现)
public void writeToObjectOutputStream(File file,User user) throws IOException {
//创建文件输出流
FileOutputStream fos = new FileOutputStream(file);
//创建object输出流
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(user);
oos.flush();
oos.close();
}

//读文件
public User readToObjectInputStream(File file) throws IOException, ClassNotFoundException{
User user = null;
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
user = (User)ois.readObject();
return user;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐