June 14th, 2007

cartman

Java API поражает

В классе java.lang.Process разумно представлены три метода для связи с его стандартными потоками IO - stdin, stdout, stderr. Хотим вычитать из stderr, берем у него getErrorStream() - получаем InputStream. Отлично. Хотим вычитать из stdout, берем у него... getOutputStream()? Фигу! Используй getInputStream() - "Gets the input stream of the subprocess. The stream obtains data piped from the standard output stream of the process represented by this Process object..." (javadoc). Та же фигня со stdin - для него есть метод getOutputStream().

Проблема в том, что метод соотв. stderr вполне нормально воспринимается с точки зрения объекта класса Process (как и должно быть, ООП епт), но для stdin и stdout всю эту фигню корректно можно воспринимать только с точки зрения "пользователя" процессом, типа можем считать из stdout процесса, давайте нам InputStream, а когда хотим записать в его stdin, давайте нам OutputStream. Вообще бред. Есть даже Bug ID: 4294755 на эту тему, который имеет статус Closed, will not be fixed (ну, хотя менять API дело темное, их тоже можно понять). Но кто-то же за такое должен получить по рукам? :)

упд. хотя, почему бы не объявить эти методы deprecated, зато добавить к ним что-нибудь в духе getStderr(), getStdout(), getStdin()...
  • Current Music
    Nightwish - Wishmaster
  • Tags