hadoop hdfs xml解析出错: Invalid UTF-8 middle byte 0x7b
- 用将xml文件上传到hdfs中,上传前使用stax的方式进行解析过,没问题。结果从hdfs中以inputstream的方式在本地再次使用stax解析,结果出错。
- 上传代码
//已追加方式上传到hdfs中
//记录文件的其实位置
fileInfo.setOffset(writeFs.getFileStatus(curPath).getLen());
FileSystem writeFs = FileSystem.get(configuration);
OutputStream out = writeFs.append(curPath);
//以字节方式拷贝到hdfs上
IOUtils.copyBytes(new FileInputStream(file), out, 4096, true);
//记录文件的长度
fileInfo.setSize((int) (writeFs.getFileStatus(curPath).getLen() - fileInfo.getOffset()));
在hdfs获得的inputstream的代码
FSDataInputStream in = FileSystem.get(configuration).open(curPath));
in.seek(offset);//跳转到文件的起始位置
stax解析代码
public abstract class StaxHandler<T> {
private XMLEventReader xmlEventReader;
private boolean stop = false;
private String firstElement = null;
protected String nextData() throws XMLStreamException {
XMLEvent event = xmlEventReader.nextEvent();
if (event.isCharacters()) {
return event.asCharacters().getData();
} else if (event.isEndElement() && event.asEndElement().getName().getLocalPart().equals(firstElement)) {
stop = true;
}
return "";
}
protected boolean hasNext() {
return !stop && xmlEventReader.hasNext();
}
protected XMLEvent nextEvent() throws XMLStreamException {
XMLEvent event = xmlEventReader.nextEvent();
if (event.isStartElement() && Objects.isNull(firstElement)) {
// 记录xml的根元素,后面EndElement中是根元素就停止读取
firstElement = event.asStartElement().getName().getLocalPart();
} else if (event.isEndElement() && event.asEndElement().getName().getLocalPart().equals(firstElement)) {
stop = true;
}
return event;
}
public void setXmlEventReader(XMLEventReader xmlEventReader) {
this.xmlEventReader = xmlEventReader;
}
abstract public void parse() throws XMLStreamException;
abstract public T getResult();
}
- 报错截图
结果在解析过程中出错了
- 尝试
上传前解析过没有问题,上传后在从hdfs中以inputstream读取解析有问题。所以先读取保存到本地之后,在对保存后的文件进行解析,这个也没有问题。
保存到本地代码
FSDataInputStream in = FileSystem.get(configuration).open(curPath));
in.seek(offset);//跳转到文件的起始位置
IOUtils.copyBytes(in, new FileOutputStream("123.xml"), fileLength, true);
//在对123.xml以stax方式进行解析,结果对着。
网上也没找到有用的信息,不知道是啥问题,特此请教。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论