package stream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable; import javax.security.auth.login.AccountException; import org.junit.jupiter.api.Test; /*
* 对象流
* 用与存储和读取基本数据类型数据 或 对象的处理刘。它的强大之处就是可以把java中的对象转换成流
*
* */ public class ObjectInputStreamTeat {
/*
* 序列化过程:将内存中的java对象保存到磁盘或通过网络传输出去
* 使用ObjectOutputStream
* */
@Test
public void testObjectOutputStream() {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("Object.dat"));
oos.writeObject(new String("我是中国人"));
oos.flush(); oos.writeObject(new Person("zsben",1,new Account(2000)));
oos.flush(); } catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(oos!=null)
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} /*
* 反序列化:用ObjectInputStream实现
* */
@Test
public void testObjectInputStream() {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("Object.dat"));
Object object = ois.readObject();
String string = (String)object;
System.out.println(string); Object object2 = ois.readObject();
Person person = (Person)object2;
System.out.println(person); } catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if(ois!=null)
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/*
* 1.Person类要实现可序列化,必须实现可序列化接口Serializable
* 2.还需要添加一个最终类属性UID
* 3.除了当前Person类需要实现Serializable,还要保证其内部所有属性都是可序列化的
* (默认情况下基本数据类型为可序列化)
* 对象流不能序列化static 和transient修饰的成员
* */
class Person implements Serializable{
public static final long serivalVersionUID = 5432146546351568416L; private String name;
private static int age;
private Account account;
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", account=" + account + "]";
}
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 Person(String name, int age) {
super();
this.name = name;
this.age = age;
} public Person(String name, int age, Account account) {
super();
this.name = name;
this.age = age;
this.account = account;
}
public Person() {
super();
}
}
class Account implements Serializable{
private double balance;
static final public long serivalVersionUID = 54685237864535874L;
@Override
public String toString() {
return "Account [balance=" + balance + "]";
} public double getBalance() {
return balance;
} public void setBalance(double balance) {
this.balance = balance;
} public Account(double balance) {
super();
this.balance = balance;
} public Account() {
super();
}
}

1

java 序列化机制的更多相关文章

  1. Java序列化机制

    java的序列化机制支持将对象序列化为本地文件或者通过网络传输至别处, 而反序列化则可以读取流中的数据, 并将其转换为java对象. 被序列化的类需要实现Serializable接口, 使用Objec ...

  2. hadoop序列化机制与java序列化机制对比

    1.采用的方法: java序列化机制采用的ObjectOutputStream 对象上调用writeObject() 方法: Hadoop 序列化机制调用对象的write() 方法,带一个DataOu ...

  3. 输入和输出--java序列化机制

    对象的序列化 什么是Java对象的序列化? 对象序列化的目标是将对象保存到磁盘上,或允许在网络中直接传输对象.对象序列化机制允许把内存中的Java对象转换成与平台无关的二进制流,从而保存或者传输.其他 ...

  4. Java序列化机制和原理及自己的理解

    Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...

  5. Java序列化机制和原理

    Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...

  6. Java序列化机制剖析

    本文转载自longdick的博文<Java序列化算法透析>,原文地址:http://longdick.iteye.com Java序列化算法透析 Serialization(序列化)是一种 ...

  7. Java序列化机制原理

      Java序列化就是将一个对象转化为一个二进制表示的字节数组,通过保存或则转移这些二进制数组达到持久化的目的.要实现序列化,需要实现java.io.Serializable接口.反序列化是和序列化相 ...

  8. Java I/O系统学习系列五:Java序列化机制

    在Java的世界里,创建好对象之后,只要需要,对象是可以长驻内存,但是在程序终止时,所有对象还是会被销毁.这其实很合理,但是即使合理也不一定能满足所有场景,仍然存在着一些情况,需要能够在程序不运行的情 ...

  9. 细看Java序列化机制

    概况 在程序中为了能直接以 Java 对象的形式进行保存,然后再重新得到该 Java 对象,这就需要序列化能力.序列化其实可以看成是一种机制,按照一定的格式将 Java 对象的某状态转成介质可接受的形 ...

随机推荐

  1. HDU 6583 Typewriter 题解

    ——本题来自杭电多校第一场 题意:给定一个字符串,主角需要用打字机将字符串打出来,每次可以: 1.花费p来打出任意一个字符 2.花费q来将已经打出的某一段(子串)复制到后面去 对于这种最优化的问题,我 ...

  2. upc组队赛16 Winner Winner【位运算】

    Winner Winner 题目链接 题目描述 The FZU Code Carnival is a programming competetion hosted by the ACM-ICPC Tr ...

  3. 001/Nginx高可用模式下的负载均衡与动静分离(笔记)

    Nginx高可用模式下的负载均衡与动静分离 Nginx(engine x)是一个高性能的HTTP和反向代理服务器,具有内存少,并发能力强特点. 1.处理静态文件.索引文件以及自动索引:打开文件描述符缓 ...

  4. python学习那点事---pycharm使用弹框问题如何解决

    学习python的目标:年后可以找一份不错的维护工作. 2019.11.4日是第一天开始学习python,从开始安装python3.6版本和pycharm开始.安装python版本非常顺利的就完成了, ...

  5. Collection -集合祖宗的常用七种共性方法

    package cn.learn.collection; import java.util.ArrayList; import java.util.Collection; /* 在java.util. ...

  6. hdu 1828 Picture(线段树轮廓线)

    Picture Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. windows与linux安装Python虚拟环境

    我这里觉得还是一步到位用virtualenvwrapper  工具,不再讲述virtualenv了,有了工具很好用 windows : 首先安装工具 pip install virtualenvwra ...

  8. spring boot整合redis多实例

    最近项目中遇到需要连接两个redis实例的情况,于是就在spring boot原先的基础上修改了一点. 首先,添加所需的依赖 <dependency> <groupId>org ...

  9. 金蝶KIS客户端修改IP连接服务器的方法

    问题现象:服务器IP变更后,金蝶KIS客户端打开时提示多个错误,并会自动关闭,无法联网登录 1. 到下面位置修改注册表 Windows Registry Editor Version 5.00 [HK ...

  10. Nginx学习总结(一)

    Nginx是目前比较主流的HTTP反向代理服务器(其企业版提供了基于TCP层的反向代理插件),对于构建大型分布式web应用,具有举足轻重的作用.简单来说,nginx有2个主要的功能:动/静态资源分离. ...