Cubic
Cubic

Reputation: 15693

Java - printing lines from buffered reader

I'm writing an InputStream that supplies lines from a file in constant intervals. I used BufferedReader before, but ran into buffering issues with it (wasn't getting anything until the entire file was read), and speed isn't an issue anyways (the intervals are something like every second, or every half second - along those lines). Is there a class with a readLine method like in BufferedReader, except unbuffered?

(Edit: I just checked - my class seems to work, apparently the problem was with the output)

Here's the code where I used the stream (OnlineDataSimulator). I already checked, the stream does exactly what I want, so apparently I'm doing something wrong with the output. (The actual problem is, I want output to occur every X milliseconds - X being the second parameter to OnlineDataSimulator. What happens when I run this code is, that I first get an X*lines wait and then the entire output at once instead.)

        System.out.println("Testing:");
        PrintStream fout = new PrintStream(new FileOutputStream("testfile"));
        for(int i=0; i<20; ++i) {
            fout.println(i);
        }
        fout.close();
        BufferedReader fin = new BufferedReader(new InputStreamReader(
                new OnlineDataSimulator("testfile",250)));
        String line;
        while((line=fin.readLine())!= null){
            System.out.println(line);
            System.out.flush();
        }
        fin.close();
        (new File("testfile")).delete();

Upvotes: 4

Views: 35942

Answers (3)

Kumar Vivek Mitra
Kumar Vivek Mitra

Reputation: 33544

Try it this way.... This worked for me..

File f = new File("path");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);

String s = null;

while ((s=br.readLine())!=null)
    {

           System.out.println(s);
    }

Upvotes: 5

Francisco Spaeth
Francisco Spaeth

Reputation: 23913

If you don't want to have a real buffer but want to use the functionality of BufferedReader you could initialize it with buffer size 1. As you commented that speed isn't an issue maybe is the most reliable solution.

new BufferedReader(reader, 1)

public BufferedReader(Reader in, int sz)

and you can check the readLine() method source code here, in case you want to implement your own.

Upvotes: 0

Razvan
Razvan

Reputation: 10093

No, there is no other non-buffered option. A solution would be to write your own Reader which has a InputStreamReader as an underlying stream and in the readLine() method you should call read() of the underlying input stream reader until "\n" is found. Aggregate all these and return them as a string.

Upvotes: 0

Related Questions