dataInput.readUTF()用Text.readString(dataInput)代替
注意:Hadoop中的基本类型直接调用其本身的readFileds和write方法
序列化集合类型时,需要给出List,Set,Map的size,反序列化的时候也要写出size
直接给出代码示例如下:
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
public class Episode implements Writable{
private String episodeID; //剧集ID
private List<String> alias; //别名
private List<String> title; //剧集名称
private String channelType; //所属频道
private List<String> keyword; //剧集关键字
private List<String> directors; //导演
private List<String> roles; //角色
private List<String> actors; //演员
private String description; //简介
public Episode(){
}
public List<String> getRoles() {
return roles;
}
public void setRoles(List<String> roles) {
this.roles = roles;
}
public List<String> getActors() {
return actors;
}
public void setActors(List<String> actors) {
this.actors = actors;
}
public String getEpisodeID() {
return episodeID;
}
public void setEpisodeID(String episodeID) {
this.episodeID = episodeID;
}
public List<String> getAlias() {
return alias;
}
public void setAlias(List<String> alias) {
this.alias = alias;
}
public List<String> getTitle() {
return title;
}
public void setTitle(List<String> title) {
this.title = title;
}
public String getChannelType() {
return channelType;
}
public void setChannelType(String channelType) {
this.channelType = channelType;
}
public List<String> getKeyword() {
return keyword;
}
public void setKeyword(List<String> keyword) {
this.keyword = keyword;
}
public List<String> getDirectors() {
return directors;
}
public void setDirectors(List<String> directors) {
this.directors = directors;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "Episode [episodeID=" + episodeID + ", alias=" + alias
+ ", title=" + title + ", channelType=" + channelType
+ ", keyword=" + keyword + ", directors=" + directors
+ ", roles=" + roles + ", actors=" + actors + ", description="
+ description + "]";
}
@Override
public void write(DataOutput output) throws IOException {
if(output != null){
// out.writeUTF(episodeID);
Text.writeString(output, episodeID);
output.writeInt(alias.size());
for(String alia:alias){
Text.writeString(output, alia);
}
output.writeInt(title.size());
for(String subTitle:title){
Text.writeString(output, subTitle);
}
Text.writeString(output, channelType);
output.writeInt(keyword.size());
for(String subKeyword:keyword){
Text.writeString(output, subKeyword);
}
output.writeInt(directors.size());
for(String director:directors){
Text.writeString(output, director);
}
output.writeInt(roles.size());
for(String role:roles){
Text.writeString(output, role);
}
output.writeInt(actors.size());
for(String actor:actors){
Text.writeString(output, actor);
}
Text.writeString(output, description);
}
}
@Override
public void readFields(DataInput input) throws IOException {
// episodeID=in.readUTF();
if(input != null){
episodeID=Text.readString(input);
int aliasLength=input.readInt();
alias=new ArrayList<String>();
for(int index=0;index<aliasLength;index++){
alias.add(Text.readString(input));
}
int titleLength=input.readInt();
title=new ArrayList<String>();
for(int index=0;index<titleLength;index++){
title.add(Text.readString(input));
}
channelType=Text.readString(input);
int keywordLength=input.readInt();
keyword=new ArrayList<String>();
for(int index=0;index<keywordLength;index++){
keyword.add(Text.readString(input));
}
int directorsLength=input.readInt();
directors=new ArrayList<String>();
for(int index=0;index<directorsLength;index++){
directors.add(Text.readString(input));
}
int rolesLength=input.readInt();
roles=new ArrayList<String>();
for(int index=0;index<rolesLength;index++){
roles.add(Text.readString(input));
}
int actorsLength=input.readInt();
actors=new ArrayList<String>();
for(int index=0;index<actorsLength;index++){
actors.add(Text.readString(input));
}
description=Text.readString(input);
}
}
}