hadoop序列化对象和传统java序列化对象不同 ,要实现以下几步 ,具体方式如下
(1)必须实现Writable接口
(2)反序列化时,需要反射调用空参构造函数,所以必须有空参构造
(3)重写序列化方法
(4)重写反序列化方法
(5)注意反序列化的顺序和序列化的顺序完全一致
(6)要想把结果显示在文件中,需要重写toString(),且用”\t”分开,方便后续用
可以导入lombok,创建bean更方便 @Data 里包括了所有属性的get 、set方法以及toString方法;@NoArgsConstructor代表类的空参构造器 依赖如下
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
具体的bean如下:
package com.demo.phone;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.hadoop.io.Writable;import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;@Data
@NoArgsConstructor
@AllArgsConstructor
public class PhoneWritable implements Writable {private Integer upFlow;
private Integer downFlow;
private Integer totalFlow;public void write(DataOutput dataOutput) throws IOException {
dataOutput.writeInt(upFlow);
dataOutput.writeInt(downFlow);
dataOutput.writeInt(totalFlow);
}public void readFields(DataInput dataInput) throws IOException {
upFlow = dataInput.readInt();
downFlow = dataInput.readInt();
totalFlow = dataInput.readInt();
}
}