序列化,反序列化


public class SerializeTest implements Serializable {

        int member1;
        long member2;
        String member3;
        boolean member4;

        public SerializeTest() {
        }

        public SerializeTest(int m1, long m2, String m3, boolean m4) {
            member1 = m1;
            member2 = m2;
            member3 = m3;
            member4 = m4;
        }

        public byte[] serialize() {
            byte[] ret = null;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(baos);
            try {
                dos.writeInt(member1);
                dos.writeLong(member2);
                dos.writeUTF(member3);
                dos.writeBoolean(member4);
                ret = baos.toByteArray();
                dos.close();
                baos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return ret;
        }
 public void deserialize(byte[] data) {
            ByteArrayInputStream bais = new ByteArrayInputStream(data);
            DataInputStream dis = new DataInputStream(bais);
            try {
                member1 = dis.readInt();
                member2 = dis.readLong();
                member3 = dis.readUTF();
                member4 = dis.readBoolean();

                dis.close();
                bais.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}


/*
* 把序列化和反序列化封装成一个类Account
*/
import java.io.*;
public class Account {
private String []message;
public Account(){}
public Account(String []message)
{
this.message=message;
}

public void setMessage(String []message)
{
this.message=message;
}
public String[] getMessage()
{
return message;
}

/*
* 序列化方法,把该对象序列化为字节流(数组)以便于RMS存储、管理 *
*/
public byte[] serialize()throws IOException
{
ByteArrayOutputStream byteArray=new ByteArrayOutputStream();
DataOutputStream data=new DataOutputStream(byteArray);
int num=message.length;
data.writeInt(num);//先序列化个数
for(int i=0;i<message.length;i++)
data.writeUTF(message[i]);
byteArray.close();
data.close();
return byteArray.toByteArray();
}

//反序列化
public void deserialize(byte []data)throws IOException
{
ByteArrayInputStream byteArray=new ByteArrayInputStream(data);
DataInputStream dataIN=new DataInputStream(byteArray);
int num=dataIN.readInt();//反序列化得到个数,该个数作为循环次数
message=null
message=new String[num];
for(int i=0;i<num;i++)
message[i]=dataIN.readUTF();
byteArray.close();
dataIN.close();
}
}


将对象转换成字节数组

import java.io.ByteArrayInputStream;  
import java.io.ByteArrayOutputStream;  
import java.io.DataInputStream;  
import java.io.DataOutputStream;  
import java.io.IOException;  
  
public class PhoneCard {  
    private int password;// 电话密码  
    private long cardNumber;// 电话卡卡号  
    private double balance;// 电话卡余额  
    private String conncetNumber;// 电话卡接入号码  
    private boolean connected;// 电话是否接通  
  
    //将对象转换成字节数组  
    public byte[] PhoneCard2Byte() throws IOException{  
        byte[] phonecard;// 用于存放转换后的对象  
        ByteArrayOutputStream baos = new ByteArrayOutputStream();// 字节输出流  
        DataOutputStream dos = new DataOutputStream(baos);// 数据输出流用于包装字节输出流  
        dos.writeInt(password);  
        dos.writeLong(cardNumber);  
        dos.writeDouble(balance);  
        dos.writeUTF(conncetNumber);  
        dos.writeBoolean(connected);  
        phonecard = baos.toByteArray();// 将写入的数据转换成字节数组  
        dos.close();  
        baos.close();  
        return phonecard;  
    }  
    //将字节数组装换成PhoneCard对象  
    public static  PhoneCard byte2PhonCard(byte[] phonecard)throws IOException{  
        PhoneCard pc = new PhoneCard();  
        ByteArrayInputStream bais = new ByteArrayInputStream(phonecard);// 字节输入流  
        DataInputStream dis = new DataInputStream(bais);// 数据输入流用于包装字节输入流  
        // 从流中读取数据,顺序要和写入时一至  
        pc.setPassword(dis.readInt());  
        pc.setCardNumber(dis.readLong());  
        pc.setBalance(dis.readDouble());  
        pc.setConncetNumber(dis.readUTF());  
        pc.setConnected(dis.readBoolean());  
        dis.close();  
        bais.close();  
        return pc;// 返回PhoneCard对象  
          
    }  
  
    // 返回对象的字符串类型  
    public String toString(){  
        return "电话密码 : " + password + "     电话卡号 :" + cardNumber + "    电话余额 :"  
                + balance + "    接入号码 :" + conncetNumber + "    接通否 :"  
                + connected;  
    }  
    public int getPassword() {  
        return password;  
    }  
  
    public void setPassword(int password) {  
        this.password = password;  
    }  
  
    public long getCardNumber() {  
        return cardNumber;  
    }  
  
    public void setCardNumber(long cardNumber) {  
        this.cardNumber = cardNumber;  
    }  
  
    public double getBalance() {  
        return balance;  
    }  
  
    public void setBalance(double balance) {  
        this.balance = balance;  
    }  
  
    public String getConncetNumber() {  
        return conncetNumber;  
    }  
  
    public void setConncetNumber(String conncetNumber) {  
        this.conncetNumber = conncetNumber;  
    }  
  
    public boolean isConnected() {  
        return connected;  
    }  
  
    public void setConnected(boolean connected) {  
        this.connected = connected;  
    }  
      
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值