Solved

slow

Posted on 2001-06-25
7
227 Views
Last Modified: 2008-02-26
I am reading standard output from a child process using getInputStream. The standard output is empty. However, it spends a lot of time reading it (30-40 seconds). What is the problem and How do I fix it?
Thanks.
------------

Process p=Runtime.getRuntime().exec(cmd);
InputStream is = p.getInputStream();
int c;
while((c=is.read())!=-1)System.out.print((char)c);
......
0
Comment
Question by:menubar
  • 4
  • 3
7 Comments
 
LVL 7

Accepted Solution

by:
Igor Bazarny earned 50 total points
ID: 6225133
Hi,

How much time takes process execution? I believe that is.read() will wait till precess out stream gets closed which happens typically on exit.

Regards,
Igor Bazarny,
Brainbench MVP for Java 1
www.brainbench.com
0
 

Author Comment

by:menubar
ID: 6225231
You are correct.
Can you also answer me this question?
The method "read()" is an abstract method inside the abstract class InputStream. API doc says the abstract method has to be implemented in a subclass.
However, I never sub-class InputStream. All I did is

InputStream is = p.getInputStream();
.. is.read()...

Who implemented "read()", how does this work?
0
 
LVL 7

Expert Comment

by:Igor Bazarny
ID: 6225420

Real class of the object returned from getInputStream() is not java.io.InputStream, but subclass which implements read() in some way--in this case in a way that makes program output available. Typically you don't need to subclass InputStream--there are plenty of subclasses to choose from. And you don't need to know precise class at compile time--what code will be executed in this case determined at runtime, because method is virtual (like most java instance methods).
0
Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

 

Author Comment

by:menubar
ID: 6225498
Sorry, I still dont understand.
getInputStream() is a method of Class Process. The doc says:
public abstract InputStream getInputStream()
The link of InputStream leads to java.io.InputStream.

>And you don't
need to know precise class at compile time--what code will be executed in this case determined at runtime,
because method is virtual (like most java instance methods).

Can you explain more? I'll up the points to 50. Thanks.
0
 
LVL 7

Expert Comment

by:Igor Bazarny
ID: 6225560
OK.

It's an example of polymorphism, one of the basic notions of OO programming. When in your code you have variable of base class type (InputStream), it may hold (and will hold, because InputStream is abstract class) a reference to an instance of subclass (e.g. FileInputStream). When you call read(), sequence of bytecodes to be executed determined by actual class of that instance (FileInputStream). Situation is same with function result. You need not know precise type of getInputStream() result. All you need to know is that is subclass of InputStream and must implement method read(). Try to add the following line somewhere after getInputStream() call:

System.out.println(is.getClass());

Does that make question more clear?

Regards,
Igor Bazarny

 
0
 

Author Comment

by:menubar
ID: 6227531
One last clafication:
what determines the instance of which subclass to be returned by getInputStream()? (Since InputStream has many subclasses, which I suppose can have different methods of their own.)
0
 
LVL 7

Expert Comment

by:Igor Bazarny
ID: 6228566
getInputStream() implementation is free to choose which subclass to return.
0

Featured Post

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Python Assistance 7 80
advertisement module in core php 4 160
javap bin 2 34
How  Can  I  resolve   this  Error "java.sql.SQLException: Invalid column index" 4 37
For customizing the look of your lightweight component and making it look opaque like it was made of plastic.  This tip assumes your component to be of rectangular shape and completely opaque.   (CODE)
Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question