Writable类---序列化和反序列化示例

来源:互联网 发布:淘宝延长收货如何设置 编辑:程序博客网 时间:2024/06/05 21:54
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Writable;/* * 序列化指将对象转化为字节流以便在网络上传输或写入磁盘 * 进行永久保存,反序列化是指将字节流转换为对象的过程 */public class WritableIO {    public static void main(String[] args) throws IOException {        IntWritable intWritable=new IntWritable();        intWritable.set(1331321);        //将intWritable序列化为byte数组        byte[] bytes=serialize(intWritable);        System.out.println("序列化结果:");        for(int i=0;i<bytes.length;i++){            System.out.print(bytes[i]+" ");        }        System.out.println();        IntWritable intWriteable2=new IntWritable();        //将byte数组反序列化为IntWritable对象        deserialize(intWriteable2, bytes);        System.out.println("反序列化结果:"+intWriteable2.get());    }    //将Writeable对象序列化为byte数组    public static byte[] serialize(Writable writable) throws IOException{        ByteArrayOutputStream out=new ByteArrayOutputStream();        DataOutputStream dataOut=new DataOutputStream(out);        writable.write(dataOut);        dataOut.close();        return out.toByteArray();    }    //反序列化    public static byte[] deserialize(Writable writable,byte[]bytes) throws IOException{        ByteArrayInputStream in=new ByteArrayInputStream(bytes);        DataInputStream dataIn=new DataInputStream(in);        writable.readFields(dataIn);        dataIn.close();        return bytes;    }}

结果:
这里写图片描述

0 0