Writable接口
来源:互联网 发布:数据泄露防护系统破解 编辑:程序博客网 时间:2024/05/21 22:57
在org.apache.hadoop.io中,hadoop使用自己的序列化格式Writables接口,具有紧凑,快速的特点,不过目前只有用Java才能较容易扩展。在hadoop中,它一般用于MapReduce程序的序列化 键值对 。它是基于java.io 中的数据输入输出流DataInput和DataOutput的。
void readFields(DataInput in) //从in流反序列化出内容(在hadoop中,为了高效率,会尽可能优先找到储存中已存在的对象将它取出复用)。
void write(DataOutput out)//把内容序列化到out流
下面就给出hadoop官方文档中推荐的例子:
public class MyWritable implements Writable { //自己定义一个类实现Writable接口,定义两个私有成员变量
// Some data
private int counter;
private long timestamp;
//覆写write方法,该方法使用out参数对象把counter和timestamp写到out中(也就是序列化的过程)。
public void write(DataOutput out) throws IOException {
out.writeInt(counter);
out.writeLong(timestamp);
}
//覆写readFields方法,该方法用in参数对象把数据读取到counter和timestamp中(也就是反序列化的过程)。
public void readFields(DataInput in) throws IOException {
counter = in.readInt();
timestamp = in.readLong();
}
//设定一个静态方法,使用此方法可以返回一个Writable对象实例
public static MyWritable read(DataInput in) throws IOException {
MyWritable w = new MyWritable();
w.readFields(in);
return w;
}
void readFields(DataInput in) //从in流反序列化出内容(在hadoop中,为了高效率,会尽可能优先找到储存中已存在的对象将它取出复用)。
void write(DataOutput out)//把内容序列化到out流
下面就给出hadoop官方文档中推荐的例子:
public class MyWritable implements Writable { //自己定义一个类实现Writable接口,定义两个私有成员变量
// Some data
private int counter;
private long timestamp;
//覆写write方法,该方法使用out参数对象把counter和timestamp写到out中(也就是序列化的过程)。
public void write(DataOutput out) throws IOException {
out.writeInt(counter);
out.writeLong(timestamp);
}
//覆写readFields方法,该方法用in参数对象把数据读取到counter和timestamp中(也就是反序列化的过程)。
public void readFields(DataInput in) throws IOException {
counter = in.readInt();
timestamp = in.readLong();
}
//设定一个静态方法,使用此方法可以返回一个Writable对象实例
public static MyWritable read(DataInput in) throws IOException {
MyWritable w = new MyWritable();
w.readFields(in);
return w;
}
}
让我们再来看一个常用的类IntWritable,它是java对int对象的一个封装,我们可以这样使用构造函数实例化对象。
IntWritable writable = new IntWritable(163);
我们使用内存操作流ByteArrayOutputStream和数据操作流DataOutputStream来查看这个writable中的序列化形式:
static byte [] serialize(Writable writable){
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream(out);
writable.write(dataOut);
dataOut.close();
return out.toByteArray();
}
byte[] bytes = serialize(writable);
再用Junit4断言,得到它的序列化形式为00000a3
0 0
- Writable接口
- Hadoop 实现Writable接口
- Writable实现类 与 自定义Writable接口
- Writable接口 与 WritableComparable接口
- Hadoop 之 Writable , WritableComparable 接口
- 序列化与Writable接口
- 实现Hadoop的Writable接口Implementing Writable interface of Hadoop
- hadoop(1.0.4) writable 接口详解
- hadoop序列化与Writable接口
- Hadoop 的Writable序列化接口
- mapreduce实现writable接口自定义输出格式
- Hadoop源码分析:Writable接口和WritableComparable接口
- 关于hadoop的mapreduce编程中自定义key,value建立的类实现writable接口
- hadoop深入研究:(十)——序列化与Writable接口
- hadoop深入研究:(十)——序列化与Writable接口
- Hadoop中如何正确编写继承自Writable接口的子类
- [hadoop2.7.1]I/O之Writable的实现类及子接口
- Hadoop自定义实现Writable/WritableComparable接口的类方法及应用
- LeetCode Longest Substring Without Repeating Characters
- TSE for SketchUp Pro - 建筑行业
- seo 第三版出来了 zac著
- 南邮 OJ 2027 操作序列
- WPF 自定义Metro Style窗体
- Writable接口
- 回调函数的作用
- 超小下载者源码
- Java引用传值的问题
- WPF 自定义Metro Style窗体
- 关于 A* 和 IDA* 的讨论(先讨论一下A*,剩下留着慢慢写)
- WPF 自定义Metro Style窗体
- 九度oj 1205
- 南邮 OJ 2029 节奏大师