简体   繁体   中英

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();

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);
    }

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM