package hadoop9999.training.exp1; 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.Writable; /** * Hadoop 序列化和反序列化工具 */ public class HadoopSerializationUtil { /** * 序列化 * @param writable * @return * @throws IOException */ public static byte[] serialize(Writable writable) throws IOException { // create bytes ByteArrayOutputStream ByteArrayOutputStream out = new ByteArrayOutputStream(); // create DataOutputStream DataOutputStream dataout = new DataOutputStream(out); // call write method writable.write(dataout); dataout.close(); // bytes return out.toByteArray(); } /** * 反序列化 * @param writable * @param bytes * @throws Exception */ public static void deserialize(Writable writable, byte[] bytes) throws Exception { // create ByteArrayInputStream ByteArrayInputStream in = new ByteArrayInputStream(bytes); // create DataInputStream DataInputStream datain = new DataInputStream(in); // read fields writable.readFields(datain); datain.close(); } }
时间: 2023-06-27 10:03:02 浏览: 87
这是一个 Hadoop 序列化和反序列化工具类,其中包含了两个静态方法 serialize 和 deserialize。
serialize 方法接收一个实现了 Writable 接口的对象作为参数,通过将其写入 ByteArrayOutputStream 中,最终返回字节数组。
deserialize 方法接收一个实现了 Writable 接口的对象和一个字节数组作为参数,在创建 ByteArrayInputStream 和 DataInputStream 后,通过 readFields 方法将字节数组中的数据读入到对象中。
阅读全文