gpt4 book ai didi

java - 流和实际数据有什么区别?

转载 作者:行者123 更新时间:2023-12-01 15:54:51 29 4
gpt4 key购买 nike

在java中,有用于输入/输出的流。

我很困惑,当我创建流时,它是流中的数据还是只是数据的管道?

实际上,我正在尝试解析从其余请求创建的 xml 响应到返回 xml 响应的 Web 服务。

//Parse Xml
ParseXml parser=new ParseXml();

parser.parseStream(connection.getInputStream());

其中连接是 HttpURLConnection 对象。

以下是parseStream()的源码

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

public class ParseXml
{
public void parseStream(InputStream input)
{
XMLReader xmlReader;

try
{
xmlReader = (XMLReader) XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(new XmlParser());

xmlReader.parse(new InputSource(input));
}
catch (SAXException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}




}


}

我遇到异常:

[Fatal Error] :1:1: Premature end of file.
org.xml.sax.SAXParseException: Premature end of file.
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at xmlparsing.ParseXml.parseStream(ParseXml.java:24)
at smssend.SmsSend.restHttpPost(SmsSend.java:129)
at main.SmsApiClass.main(SmsApiClass.java:28)

最佳答案

InputStream 是您可以从中读取数据的东西。我也可以将其称为数据源,但我不会将其称为管道。对我来说,管道涉及多个粘在一起的部分。

关于解析器错误:在将数据直接提供给解析器之前,您应该将其写入文件或 System.out,以确保某些数据实际到达。

然后您应该将该数据提供给解析器,看看当您提供已知数据时会发生什么。

如果这两种情况都正常的话,就可以直接喂数据了。

[更新2011-03-12]

这是一个适合我的完整示例。也许您可以发现代码的差异(您只发布了部分代码,尤其是创建 InputStream 的部分):

package so5281746;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

public class ParseXml {

public static void parseStream(InputStream input) {
try {
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(new XmlParser());
xmlReader.parse(new InputSource(input));
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

public static void main(String[] args) throws IOException {
URLConnection conn = new URL("http://repo1.maven.org/maven2/org/apache/ant/ant/maven-metadata.xml").openConnection();
InputStream input = conn.getInputStream();
parseStream(input);
}

static class XmlParser extends DefaultHandler {

@Override
public void startDocument() throws SAXException {
System.out.println("startDocument");
}

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("startElement " + localName);
}

@Override
public void endDocument() throws SAXException {
System.out.println("endDocument");
}
}

}

关于java - 流和实际数据有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281746/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com