序列化接口
package com.example.serial;
public interface ISerializer {
//序列化
<T> byte[] serializer(T obj);
//反序列化
<T> T deserializer(byte[] data,Class<T> clazz);
}
java自带序列化
package com.example.serial;
import java.io.*;
public class ISerializerImpl implements ISerializer {
//返回流
// @Override
// public <T> byte[] serializer(T obj) {
// ByteArrayOutputStream byteArrayInputStream = new ByteArrayOutputStream();
// ObjectOutputStream objectOutputStream = null;
// try {
// objectOutputStream = new ObjectOutputStream(byteArrayInputStream);
// objectOutputStream.writeObject(obj);
// return byteArrayInputStream.toByteArray();
// } catch (IOException e) {
// e.printStackTrace();
// }finally {
// if (objectOutputStream!=null){
// try {
// objectOutputStream.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// try {
// byteArrayInputStream.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// return new byte[0];
// }
//序列化文件流
@Override
public <T> byte[] serializer(T obj) {
ObjectOutputStream objectOutputStream = null;
try {
objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("user")));
objectOutputStream.writeObject(obj);
} catch (IOException e) {
e.printStackTrace();
}finally {
if (objectOutputStream!=null){
try {
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return new byte[0];
}
//读取字节流
// @Override
// public <T> T deserializer(byte[] data, Class<T> clazz) {
// ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);
// ObjectInputStream objectInputStream = null;
// try {
// objectInputStream = new ObjectInputStream(byteArrayInputStream);
// return (T)objectInputStream.readObject();
// } catch (IOException e) {
// e.printStackTrace();
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// } finally {
// if (byteArrayInputStream!=null){
// try {
// objectInputStream.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// try {
// byteArrayInputStream.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// return null;
// }
//反序列化文件流
@Override
public <T> T deserializer(byte[] data, Class<T> clazz) {
ObjectInputStream objectInputStream = null;
try {
objectInputStream = new ObjectInputStream(new FileInputStream(new File("user")));
return (T)objectInputStream.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (objectInputStream!=null){
try {
objectInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
实体类
package com.example.serial;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* 父子类只需要一个实例化就行
*/
public class User implements Serializable {
public static int num = 5;
private static final long serialVersionUID = 950462239536300794L;
private String name;
private int age;
//transient不会被序列化
private transient String hobby;
//transient属性的值可以通过 writeObject readObject重新实现序列化
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException{
objectOutputStream.defaultWriteObject();
objectOutputStream.writeObject(hobby);
}
private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
hobby=(String) objectInputStream.readObject();
}
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 static int getNum() {
return num;
}
public static void setNum(int num) {
User.num = num;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", hobby='" + hobby + '\'' +
'}';
}
}
demo测试
package com.example.serial;
public class app {
public static void main(String[] args) {
ISerializer iSerializer = new ISerializerImpl();
//实现序列化
User user = new User();
user.setAge(18);
user.setName("lizhe");
user.setHobby("tttt");
iSerializer.serializer(user);
//反序列化
User user1 = iSerializer.deserializer(null, User.class);
System.out.println(user1);
}
}
基于fastjson序列化
引入pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.29</version>
</dependency>
实现类
package com.example.serial;
import com.alibaba.fastjson.JSON;
public class FastJsonSerializerimpl implements ISerializer{
@Override
public <T> byte[] serializer(T obj) {
return JSON.toJSONString(obj).getBytes();
}
@Override
public <T> T deserializer(byte[] data, Class<T> clazz) {
return JSON.parseObject(new String(data),clazz);
}
}
demo
package com.example.serial;
public class appJSONDemo {
public static void main(String[] args) {
ISerializer iSerializer = new FastJsonSerializerimpl();
//实现序列化
User user = new User();
user.setAge(18);
user.setName("lizhe");
user.setHobby("文文");
byte[] bytes = iSerializer.serializer(user);
System.out.println(new String(bytes));
//反序列化
User user1 = iSerializer.deserializer(bytes, User.class);
System.out.println(user1);
}
}
基于xml实现序列化
引入依赖
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.10</version>
</dependency>
实现类
package com.example.serial;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import java.io.*;
public class XmlSerializerImpl implements ISerializer {
XStream xStream = new XStream(new DomDriver());
@Override
public <T> byte[] serializer(T obj) {
return xStream.toXML(obj).getBytes();
}
@Override
public <T> T deserializer(byte[] data, Class<T> clazz) {
return (T)xStream.fromXML(new String(data));
}
}
demo
package com.example.serial;
public class appXmlDemo {
public static void main(String[] args) {
ISerializer iSerializer = new XmlSerializerImpl();
//实现序列化
User user = new User();
user.setAge(18);
user.setName("lizhe");
user.setHobby("文文");
byte[] bytes = iSerializer.serializer(user);
System.out.println(new String(bytes));
//反序列化
User user1 = iSerializer.deserializer(bytes, User.class);
System.out.println(user1);
}
}