`

几种序列化的实现方法 java自带, Writable, Avro

 
阅读更多

 

package org.hdp.practice.serial;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import org.apache.avro.file.DataFileReader;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.io.DatumReader;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.specific.SpecificDatumReader;
import org.apache.avro.specific.SpecificDatumWriter;

public class Avro {

	public static void main(String[] args) throws Exception{
		//readAvro();
		//writeJavaObject();
		readWriteableObject();
	}
	
	static void writeWriteableObject() throws Exception{
		FileOutputStream fos = new FileOutputStream("D:/tmp/users.wobj");
		DataOutputStream dos = new DataOutputStream(fos);
		
		MyUser user1 = new MyUser();
		user1.setName("Alyssa");
		user1.setFavoriteNumber(256);
		user1.setFavoriteColor("yellow");
		user1.write(dos);
		
		MyUser user2 = new MyUser("Ben", 7, "red");
		user2.write(dos);

		dos.close();
		fos.close();
	}
	
	static void readWriteableObject() throws Exception{
		FileInputStream fis = new FileInputStream("D:/tmp/users.wobj");
		DataInputStream dis = new DataInputStream(fis);
		
		MyUser user1 = new MyUser();
		user1.readFields(dis);
		System.out.println(user1);
		
		MyUser user2 = new MyUser();
		user2.readFields(dis);
		System.out.println(user2);
		
		dis.close();
	}
	
	
	static void writeJavaObject() throws Exception{
		User user1 = new User();
		user1.setName("Alyssa");
		user1.setFavoriteNumber(256);

		User user2 = new User("Ben", 7, "red");

		User user3 = User.newBuilder()
		             .setName("Charlie")
		             .setFavoriteColor("blue")
		             .setFavoriteNumber(null)
		             .build();
		
		FileOutputStream fos = new FileOutputStream("D:/tmp/users.jobj");
		ObjectOutputStream oos = new ObjectOutputStream(fos);
		oos.writeObject(user1);
		oos.writeObject(user2);
		oos.writeObject(user3);
		oos.close();
		fos.close();
	}
	
	static void readJavaObject() throws Exception{
		FileInputStream fis = new FileInputStream("D:/tmp/users.jobj");
		ObjectInputStream ois = new ObjectInputStream(fis);

		User user =  (User)ois.readObject();
		System.out.println(user);
		
		User user1 =  (User)ois.readObject();
		System.out.println(user1);
		
		User user2 =  (User)ois.readObject();
		System.out.println(user2);
		
		ois.close();
		fis.close();
	}
	
	
	static void writeAvro() throws Exception{
		User user1 = new User();
		user1.setName("Alyssa");
		user1.setFavoriteNumber(256);

		User user2 = new User("Ben", 7, "red");

		User user3 = User.newBuilder()
		             .setName("Charlie")
		             .setFavoriteColor("blue")
		             .setFavoriteNumber(null)
		             .build();

		DatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>(User.class);
		DataFileWriter<User> dataFileWriter = new DataFileWriter<User>(userDatumWriter);
		dataFileWriter.create(user1.getSchema(), new File("D:/tmp/users.avro"));
		dataFileWriter.append(user1);
		dataFileWriter.append(user2);
		dataFileWriter.append(user3);
		dataFileWriter.close();
	}
	
	static void readAvro() throws Exception{
		File file = new File("D:/tmp/users.avro");
		DatumReader<User> userDatumReader = new SpecificDatumReader<User>(User.class);
		DataFileReader<User> dataFileReader = new DataFileReader<User>(file, userDatumReader);
		User user = null;
		while (dataFileReader.hasNext()) {
			user = dataFileReader.next(user);
			System.out.println(user);
		}
		dataFileReader.close();
	}

}

 

分享到:
评论

相关推荐

    Hadoop序列化机制

    所有可序列化的类都需要实现Writable接口,并提供写入和读取字段的方法。例如,IntWritable和Text是两个常用的Writable类。尽管简单易用,但Writable序列化相对较慢,且不支持跨语言兼容。 2. Protocol Buffers:这...

    HadoopCommon包分析1

    Writable接口提供了一种紧凑、快速的序列化方式,适合处理大量数据。它允许对象直接写入和读取DataOutput和DataInput流,减少了额外的开销。用户还可以复用对象,避免了反序列化时不断创建新对象的问题。Writable...

    精品课程推荐 大数据与云计算教程课件 优质大数据课程 12.序列化框架(共28页).pptx

    7. **序列化框架**:序列化是数据交换的关键,课程详细阐述了Hadoop中可替换的序列化框架,包括Writable接口、Avro和其他序列化技术如Protocol Buffers,强调了Avro的灵活性和跨语言兼容性。 8. **MapReduce进阶**...

    [Hadoop权威指南(第三版)].Tom.White.文字版.pdf

    - **序列化框架**:介绍了Hadoop支持的几种序列化框架,如Avro等。 - **基于文件的数据结构**: - **SequenceFile**:解释了SequenceFile的用途与特点。 - **MapFile**:介绍了MapFile的用法及其优势。 7. **第...

    传智黑马赵星老师hadoop七天课程资料笔记-第三天(全)

    该图可能解释了Hadoop支持的不同序列化框架,如Writable接口或Avro,以及它们的工作原理。 4. **第三天.ppt** - 这是课程的PPT材料,很可能包含了详细的课件,涵盖了第三天课程的所有主题,包括Hadoop的执行流程、...

    hadoop api.doc

    `Writable`接口定义了对象如何序列化和反序列化,而`WritableComparable`则添加了比较操作,常用于排序。此外,`InputFormat`和`OutputFormat`接口用于定义数据的输入和输出格式。 5. **org.apache.hadoop.ipc**: ...

    hadoop_the_definitive_guide_3nd_edition.pdf

    ### Hadoop权威指南第三版知识点概述...- **序列化框架**:介绍了Hadoop支持的序列化框架,如Avro等。 通过以上内容的详细介绍,读者可以全面了解Hadoop的核心技术和应用场景,为后续的深入学习和实践奠定坚实的基础。

    Hadoop权威指南(中文版)2015上传.rar

    序列化框架 Avro 依据文件的数据结构 写入SequenceFile MapFile 第5章 MapReduce应用开发 配置API 合并多个源文件 可变的扩展 配置开发环境 配置管理 辅助类GenericOptionsParser,Tool和ToolRunner 编写单元测试 ...

    Hadoop权威指南 第二版(中文版)

     序列化框架  Avro  依据文件的数据结构  写入SequenceFile  MapFile 第5章 MapReduce应用开发  配置API  合并多个源文件  可变的扩展  配置开发环境  配置管理  辅助类GenericOptionsParser,Tool和...

    Hadoop: The Definitive Guide 3rd_edition

    Writable接口和Writable类是Hadoop序列化框架的核心,书中也介绍了如何实现自定义的Writable类。同时,本书还探讨了基于文件的数据结构,比如Avro、SequenceFile和MapFile。 书中还涉及了Hadoop生态系统中的其他...

    Hadoop_The_Definitive_Guide_Third_Edition.pdf

    文档中提到了Hadoop I/O,包括压缩、序列化框架以及Avro和Sequence File等文件格式的介绍。序列化是数据结构转换成能够进行网络传输或存储到文件中的格式的过程。数据序列化之后,可以被压缩以减少存储空间的使用和...

Global site tag (gtag.js) - Google Analytics