Java 将BufferedReader转换为InputStream
我刚刚完成了一系列代码的编写,这些代码在从内部资源读取时运行良好:)) 问题是如何将“BufferedReader”的类型更改为“InputStream”来解析数据??? 还是做这种事的最好方法???Java 将BufferedReader转换为InputStream,java,android,inputstream,bufferedstream,Java,Android,Inputstream,Bufferedstream,我刚刚完成了一系列代码的编写,这些代码在从内部资源读取时运行良好:)) 问题是如何将“BufferedReader”的类型更改为“InputStream”来解析数据??? 还是做这种事的最好方法??? 抱歉英语不好:)为什么不直接使用xmlFactory.setInput(Reader)呢?@JonSkeet您介意具体说明一下吗?给我举个例子:/对不起,我的意思是xmlPullParser.setInput(reader)。基本上,你的代码没有理由必须采用输入流——如果你只是将它改为采用读取器,
抱歉英语不好:)为什么不直接使用
xmlFactory.setInput(Reader)
呢?@JonSkeet您介意具体说明一下吗?给我举个例子:/对不起,我的意思是xmlPullParser.setInput(reader)
。基本上,你的代码没有理由必须采用输入流
——如果你只是将它改为采用读取器
,那就好了。@JonSkeet谢谢你,伙计:))只是另一个线索,我们会很好:)读取器采用BufferedReader,或者我必须使用它?一个BufferedReader
是一个读取器
(请阅读文档)。
try {
SeriesDataXMLPullParserHandler seriesDataXmlPullParserHandler = new SeriesDataXMLPullParserHandler();
entries = seriesDataXmlPullParserHandler.parse(getAssets().open("series_box.xml"));
} catch (IOException e) {
e.printStackTrace();
Log.d("errorOpeningSeries", e.getMessage());
}
Collections.sort(entries, new Comparator<Entry>() {
@Override
public int compare(Entry entryOne, Entry entryTwo) {
return (entryOne.getSeriesName().compareTo(entryTwo.getSeriesName()));
}
});
listView.setAdapter(new MyAdapter(this, R.id.details_SeriesName, entries));
public class SeriesDataXMLPullParserHandler {
List<Entry> entries;
private Entry entry;
private String text;
public SeriesDataXMLPullParserHandler() {
entries = new ArrayList<>();
}
public List<Entry> getEntries() {
return entries;
}
public List<Entry> parse(InputStream inputStream) {
XmlPullParserFactory xmlPullParserFactory = null;
XmlPullParser xmlPullParser = null;
try {
xmlPullParserFactory = XmlPullParserFactory.newInstance();
xmlPullParserFactory.setNamespaceAware(true);
xmlPullParser = xmlPullParserFactory.newPullParser();
xmlPullParser.setInput(inputStream, null);
int eventType = xmlPullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = xmlPullParser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("series")) {
entry = new Entry();
}
break;
case XmlPullParser.TEXT:
text = xmlPullParser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("series")) {
entries.add(entry);
} else if (tagname.equalsIgnoreCase("id")) {
entry.setId(text);
} else if (tagname.equalsIgnoreCase("Actors")) {
entry.setActors(text);
}else if (tagname.equalsIgnoreCase("Genre")) {
entry.setGenre(text);
} else if (tagname.equalsIgnoreCase("IMDB_ID")) {
entry.setImdb_id(text);
} else if (tagname.equalsIgnoreCase("Language")) {
entry.setLanguage(text);
} else if (tagname.equalsIgnoreCase("Network")) {
entry.setNetwork(text);
} else if (tagname.equalsIgnoreCase("NetworkID")) {
entry.setNetwork_id(text);
} else if (tagname.equalsIgnoreCase("Overview")) {
entry.setOverview(text);
} else if (tagname.equalsIgnoreCase("SeriesID")) {
entry.setSeriesId(text);
} else if (tagname.equalsIgnoreCase("SeriesName")) {
entry.setSeriesName(text);
}
break;
default:
break;
}
eventType = xmlPullParser.next();
}
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
}
return entries;
}
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream()));