序列化生成的文件,我写了个类就能拿到对象。那这还有什么意义,没什么加密作用啊?
是我理解错了吗?
我的测试代码:
class Cat implements Serializable{
private String name;
public Cat(){
this.name = "new cat";
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
public static void main(String []args){
Cat cat = new Cat();
try{
//这就是要序列化文件的存储位置,是由自己控制的。
//FileOutputStream fos = new FileOutputStream("zmy/catDemo2.txt");
FileOutputStream fos = new FileOutputStream("zmy/catDemo2.bat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
System.out.println("1>"+cat.getName());
cat.setName("zMy cat");
oos.writeObject(cat);
oos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
public class TestReadSerializable implements Serializable{
public static void main(String []args){
try{
FileInputStream fis = new FileInputStream("zmy/catDemo2.bat");
ObjectInputStream ois = new ObjectInputStream(fis);
Cat cat = (Cat)ois.readObject();
System.out.println(cat.getName());
ois.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。
网络传输的时候,可以传字符串,亦可以传对象object,例如socket,传字符串的时候接收方很容易解析出来,但是,传一个对象的时候,对方读完字节流后,不知道你传的什么对象,所以没办法给转成原来的对象并解析对象的属性,这时候就要用到序列化和反序列化。
类实现序列化接口,socket发送这个对象的字节流,接收方到流后就可以将流反序列化成对象,然后使用对象的方法和属性。
白话:
对象是层次结构的,像一棵树。对象里面字段可能又是一个对象。
如果你希望网络传输或者保存到文件中,它们是线性的,从头到尾的。
序列化就是把对象拍扁成一个序列。
饭序列化就是把拍扁的对象拉起来成一个立体的。
序列化:就是把对象数据序列化成二进制数据
反序列化:就是把二进制数据反序列化成对象数据
作用:在接口间传输数据的时候,二进制数据优越于对象类型的数据
使用:不管是JAVA还是c#在需要序列化的类里实现序列化接口即可
LZ说的,用JSON当然可以,JSON说白了,就是一个字符串,这个字符串有对应的类去解析成JSON格式,然后才可以方便的使用,那么这个JSON格式的字符串在各项目接口间传输的时候使用序列化和反序列化操作来传输,如果LZ写过接口数据,一定知道,接口发送的数据和接收的数据都是Stream,stream就是二进制数据,归根究底,网络接口中传输的数据就是二进制传输的
看了下边博友们的回复,似乎懂了点。