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
测试类UserObjectOutputStreamDemo1
把对象转化为字节序列,这个过程称之为对象序列化
与之相反的称之为反序列化。
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; } }
相关文章推荐
- Socket同时使用ObjectInputStream和ObjectOutputStream传输序列化对象时的顺序
- Java中ObjectInputStream 与 ObjectOutputStream的使用
- 使用ObjectInputStream和ObjectOutputStream注意问题
- ObjectInputStream与ObjectOutputStream的使用问题-01
- Java使用ObjectOutputStream和ObjectInputStream序列号对象报java.io.EOFException异常的解决方法
- java_IO流之ObjectInputStream与ObjectOutputStream的使用
- 我的Java开发学习之旅------>Java使用ObjectOutputStream和ObjectInputStream序列号对象报java.io.EOFException异常的解决方法
- Socket同时使用ObjectInputStream和ObjectOutputStream传输序列化对象时的顺序
- 使用对象输入输出流(ObjectOutputStream,ObjectInputStream)实现序列化对象的深度克隆
- Socket同时使用ObjectInputStream和ObjectOutputStream传输序列化对象时的顺序
- 使用 ObjectInputStream 和ObjectOutputStream 经常出现的问题
- 使用对象流读写对象代码笔记(ObjectInputStream ,ObjectOutputStream)
- 通过ObjectOutputStream序列化和使用ObjectInputStream反序列化
- IO流中ObjectOutputStream和ObjectInputStream的使用
- 关于如何将一个对象保存到本地文件之ObjectOutputStream、ObjectInputStream的使用小结。
- java中ObjectOutputStream和ObjectInputStream的使用
- Java中ObjectOutputStream和ObjectInputStream的基本使用详解
- java中使用ObjectOutputStream和ObjectInputStream时产生的“invalid stream header”错误解决方法
- java对象流ObjectInputStream、ObjectOutputStream的使用
- Java使用GZIP进行压缩和解压缩(GZIPOutputStream,GZIPInputStream)