Nano Hash - криптовалюты, майнинг, программирование

В чем разница между потоком и фактическими данными?

В java есть потоки для ввода/вывода.

Я смущен тем, что когда я создаю поток, это данные, которые находятся в потоке, или просто конвейер для данных?

На самом деле я пытаюсь проанализировать ответ xml, созданный из запроса на отдых, в веб-службу, которая возвращает ответ xml.

//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)
12.03.2011

Ответы:


1

InputStream — это то, из чего вы можете читать данные. Я также мог бы назвать это источником данных, но я бы не назвал это конвейером. Для меня конвейер состоит из нескольких частей, склеенных вместе.

По поводу вашей ошибки парсера: Прежде чем подавать данные напрямую в парсер, вы должны записать их в файл или System.out, просто чтобы убедиться, что какие-то данные действительно поступили.

Затем вы должны передать эти данные синтаксическому анализатору, чтобы посмотреть, что произойдет, когда вы подадите ему известные данные.

И если эти два случая работают правильно, вы можете напрямую передавать данные.

[Обновление от 12 марта 2011 г.]

Вот полный пример, который работает для меня. Возможно, вы заметите разницу в своем коде (из которого вы разместили только части, особенно ту часть, которая создает 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");
    }
  }

}
12.03.2011
  • Итак, когда я создаю InputStream, данные начинают поступать автоматически? Или я должен получить его, используя некоторые методы ?? Что касается ошибки, я проверил данные, и она присутствует. Ну нет ли способа избежать записи в файл . 12.03.2011
  • Метод parse выполняет эту выборку данных. В вашем случае предположительно XML неправильно сформирован, а это означает, что какой-то закрывающий тег отсутствует. 12.03.2011
  • Не хватает гораздо большего, чем закрывающий тег. В сообщении об ошибке говорится, что в строке 1 столбца 1 достигнут конец файла. Это означает, что было прочитано 0 байт. 12.03.2011
  • код, который вы указали, открывает соединение с файлом xml в Интернете. Пока я пытаюсь работать с ответом от веб-службы на основе Rest. это имеет значение? 14.03.2011
  • Нет, это не имеет значения. Обе веб-технологии приводят к результату InputStream в конце, и это то, что вы передаете синтаксическому анализатору XML. 14.03.2011

  • 2

    В Java нет такой вещи, как «данные», есть только «объекты». Как и все остальное, InputStream является объектом. У него есть методы, такие как read(), которые дают вам доступ к данным. Спрашивать, «являются ли они» данными, бессмысленно — принцип объектно-ориентированных языков заключается в том, что данные всегда скрыты за интерфейсами, такими как интерфейс read().

    12.03.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..