//1
package com.example.sei;
import org.apache.hadoop.io.Writable;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
//学生类,姓名,年龄
//支持hadoop的序列化
//1.要实现Writable接口
//2.补充一个空参构造
public class StudentH implements Writable {
String name;
int age;
//空参构造
public StudentH() {}
public StudentH(String name, int age) {
this.name = name;
this.age = age;
}
//write:在序列化的时候,调用,把对象写到文件
@Override
public void write(DataOutput dataOutput) throws IOException {
//dataOutput.writeUTF(字段);
dataOutput.writeUTF(name);
dataOutput.writeInt(age);
}
//readFields:反序列化的时候,调用,从文件中读出内容,还原这个对象
//字段顺序要与write中的顺序一致
@Override
public void readFields(DataInput dataInput) throws IOException {
//字段=dataInput.read();
name=dataInput.readUTF();
age=dataInput.readInt();
}
}
//2
package com.example.sei;
import java.io.*;
public class TestStudentH {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//实例化student对象
// StudentH student = new StudentH("张三", 18);
// System.out.println(student.name+ " " + student.age);
//
//
//
// //hadoop序列化:把对象保存到第一个文件中
// DataOutputStream dos = new DataOutputStream(new FileOutputStream("student_hadoop.ser"));
// student.write(dos);
//hadoop反序列化:从第一个文件中读取对象
DataInputStream dis = new DataInputStream(new FileInputStream("student_hadoop.ser"));
StudentH student1 = new StudentH();
student1.readFields(dis);
System.out.println(student1.name+ " " + student1.age);
}
}