java string 序列化_详解JAVA序列化

享学课堂作者:逐梦々少年

转载请声明出处!

现在开发过程中经常遇到多个进程多个服务间需要交互,或者不同语言的服务之间需要交互,这个时候,我们一般选择使用固定的协议,将数据传输过去,但是在很多语言,比如java等jvm语言中,传输的数据是特有的类对象,而类对象仅仅在当前jvm是有效的,传递给别的jvm或者传递给别的语言的时候,是无法直接识别类对象的,那么,我们需要多个服务之间交互或者不同语言交互,该怎么办?这个时候我们就需要通过固定的协议,传输固定的数据格式,而这个数据传输的协议称之为序列化,而定义了传输数据行为的框架组件也称之为序列化组件(框架)

序列化有什么意义

首先我们先看看,java中的序列化,在java语言中实例对象想要序列化传输,需要实现Serializable 接口,只有当前接口修饰定义的类对象才可以按照指定的方式传输对象。而传输的过程中,需要使用java.io.ObjectOutputStream 和java.io.ObjectInputStream 来实现对象的序列化和数据写入,接着我们看一个最基础的序列化:

我们创建一个java实体类:

public class User {

private Integer id;

private String name;

private Byte sex;

private Integer age;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Byte getSex() {

return sex;

}

public void setSex(Byte sex) {

this.sex = sex;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

@Override

public String toString() {

return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";

}

}

然后我们编写发送对象(序列化)的实现:

public class OutPutMain

{

public static void main( String[] args ) throws UnknownHostException, IOException

{

Socket socket = new Socket("localhost",8080);

try(ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream())){

User user = new User().setAge(10).setId(10).setName("张三").setSex((byte)0);

outputStream.writeObject(user);

outputStream.flush();

System.out.println("对象已经发送:--->"+user);

}catch (Exception e) {

e.getStackTrace();

System.err.println("对象发送失败:--->");

}finally{

if(!socket.isClosed()){

socket.close();

}

}

}

}

然后定义读取实体(反序列化)的代码:

public class InputMain {

public static void main(String[] args) throws IOException {

ServerSocket serverSocket = new ServerSocket(8080);

Socket socket = serverSocket.accept();

try(ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream())){

User user = (User) inputStream.readObject();

System.out.println(user);

}catch (Exception e) {

e.getStackTrace();

}finally {

if(!serverSocket.isClosed()){

你可能感兴趣的:(java,string,序列化)